0
0

More than 3 years have passed since last update.

ニュートラルネットワーク(重みとバイアス)

Last updated at Posted at 2021-09-10

ポイント

・ニュートラルネットワークのノードに入力されたデータは ➀線形変換 ➁非線形変換 を経てノードから出力される。そのデータは出力されたノードと隣あうノードの入力データとなる。この流れが出力層まで繰り返されていく。
・線形は直線で表現され、非線形は曲線で表現できる。
・重みとバイアスを用いて入力データに対して線形変換が行われる。
・非線形変換では今回、シグモイド曲線を用いた。非線形曲線は別名活性化関数と呼ぶ。

ソース

import numpy as np
import matplotlib.pyplot as plt

def nuro(x,y,bias):
  #xとyについてそれぞれ-1.0,-0.8,-0.6 … 10個のデータを作成する
  X=np.arange(-1.0,1.0,0.2)
  Y=np.arange(-1.0,1.0,0.2)
  #0詰めの10×10の行列を準備
  z=np.zeros((10,10))

  for i in range(10):
    for j in range(10):
      #線形変換の実施
      u=X[i]*x+Y[j]*y+bias
      #非線形変換(シグモイド曲線)の実施
      y=1/(1+np.exp(-u))
      #非線形変換後の数値を行列に格納する
      z[j][i]=y

  #グリッド表示
  plt.imshow(z,"gray",vmin=0.0,vmax=1.0)
  plt.colorbar()
  plt.show()

#メイン関数
def main():
  #複数の重みの準備
  w_x=[1.0,2.0,3.0]
  w_y=[3.0,5.0,7.0]

  #複数のバイアスの準備
  bias=[0.1,0.2,0.3]

  for i,j,k in zip(w_x,w_y,bias):
    nuro(i,j,k)

if __name__ == "__main__":
    main()

出力

image.png

・図よりわかること

1に近いほど、白く活性化度が強い。逆に、0に近いほど、黒く活性化度が弱い。重みやバイアスを調整することで、微妙に座標に対する活性化度が変化することがわかる。

補足【シグモイド曲線について】

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(a):
  return 1/(1+np.exp(-a))

a=np.arange(-5,5)
b=sigmoid(a)

plt.plot(a,b)
plt.show()

出力

image.png

・シグモイド曲線の特徴

シグモイド曲線のおかげで、出力データは0~1の間に収束することができる。

関連記事

ニュートラルネットワーク(重みとバイアス)応用

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0