ITエンジニア ノイのブログ

ITエンジニアのノイです。 YouTubeで ITエンジニアのお勉強という学習用の動画を公開しています。チャンネル登録お願いします!https://m.youtube.com/channel/UCBKfJIMVWXd3ReG_FDh31Aw/playlists

NumPyのdot関数

こんにちは!ノイです。 Pythonで行列計算を行う際にNumPyを使うことがよくあります。 for文を使って頑張って書けば同じことはできますが、NumPyは行列計算を高速で行う仕組みがあり、NumPyを使えば頑張らなくても高速で演算ができるので、みんなが使っているのです。

dot関数

NumPyのdot関数は、2つの配列の内積(ドット積)を計算します。 内積は、2つのベクトルの成分ごとの積の総和であり、それぞれの成分を乗算したものを足し合わせた値になります。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

c = np.dot(a, b)

print(c)

出力は1×4+2×5+3×6 = 4+10+18で32になります。

この例では、2つのベクトルaとbの内積を計算し、その結果を変数cに格納しています。 dot関数は、aとbの要素を対応する位置で乗算して、その結果を足し合わせたものを返しています。

dot関数は、多次元配列でも同様に動作します。配列の内積を計算するために使用されますが、注意点として、a.dot(b)とnp.dot(a, b)は同じ結果を生成することができますが、多次元配列で使用される場合には、np.dotの使用が推奨されます。

機械学習への応用

パーセプトロンでNAND表現

パーセプトロンでNANDを表現するとこのようになります。

import numpy as np

def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.6
    
    tmp = np.dot(x, w) + b
    if tmp <= 0:
        return 0
    else:
        return 1

このようにニューラルネットワークの基本であるパーセプトロンでNANDを実装することができます。

1層の順伝搬計算

x = np.array([1,2])
print(x.shape)
W = np.array([[1,2,3],[4,5,6]])
print(W.shape)
np.dot(x, W) #1+8,2+10,3+12

結果

(2,)
(2, 3)
array([ 9, 12, 15])

ニューラルネットワークの図と対応させるとこのようになります。

余計な一言

ディープラーニングを実装する時はTensorFlowや Pytorchと言ったフレームワークを用いると頑張らなくても簡単に実装ができてしまいます…

youtu.be