ラビットチャレンジ 深層学習day1レポート 実装演習

入力層~中間層

順伝播(単層・単ユニット)

  • 重み、バイアスともにランダムで生成
  • 活性化関数はReLu関数

出力結果

*** 重み *** [0.83504192 0.57427099] shape: (2,)
*** バイアス *** 0.9312772127495758 shape: ()
*** 入力 *** [2 3] shape: (2,)
*** 総入力 *** 4.324174027229502 shape: ()
*** 中間層出力 *** 4.324174027229502 shape: ()

考察:
ReLu関数を使用していて、なおかつu>0なので総入力と中間層出力が等しい。
次に総入力が0以下になるような重みとバイアスを取ってみる。

*** 重み *** [[0.1] [0.2]] shape: (2, 1)
*** バイアス *** -1.5 shape: ()
*** 入力 *** [2 3] shape: (2,)
*** 総入力 *** [-0.7] shape: (1,)
*** 中間層出力 *** [0.] shape: (1,)

活性化関数がReLu関数でなおかつ総入力uがマイナスなので、中間層出力は0になる。

順伝播(単層・複数ユニット)

  • 重みとバイアスはソースコードで指定されたもの
  • 活性化関数はシグモイド関数

出力結果

*** 重み *** [[0.1 0.2 0.3 0. ] [0.2 0.3 0.4 0.5] [0.3 0.4 0.5 1. ]] shape: (3, 4) *** バイアス *** [0.1 0.2 0.3] shape: (3,)
*** 入力 *** [ 1. 5. 2. -1.] shape: (4,)
*** 総入力 *** [1.8 2.2 2.6] shape: (3,)
*** 中間層出力 *** [0.85814894 0.90024951 0.93086158] shape: (3,)

順伝播(3層・複数ユニット)

  • 入力層、中間層1、中間層2、出力層の構成
  • 中間層の活性化関数にはRuLE関数

順伝播開始 #####
*** 総入力1 *** [2.45629821 5.10529484 2.94183202 6.00245319 4.62979921 5.69487186 3.63889929 4.1358152 2.50275556 3.13350507] shape: (10,)
*** 中間層出力1 *** [2.45629821 5.10529484 2.94183202 6.00245319 4.62979921 5.69487186 3.63889929 4.1358152 2.50275556 3.13350507] shape: (10,)
*** 中間層出力2 *** [21.42117735 18.29443323 26.67356868 21.18331503 28.13265757] shape: (5,)
*** 総入力2 *** [21.42117735 18.29443323 26.67356868 21.18331503 28.13265757] shape: (5,)
*** 出力 *** [50.30662356 29.89105075 55.43581744 69.80246561] shape: (4,) 出力合計: 205.43595736146057

中間層2の出力から出力層へ行く間にも\(\bf{u} = \bf{W} + \bf{b}\)の計算が行われている。

Section2 活性化関数

ステップ関数

シグモイド関数

ReLu関数

Section3 出力層

平均二乗誤差

クロスエントロピー誤差

 

多クラス分類

  • 2-3-4ネットワークから3-5-6ネットワークへ変更
  • 入力値、パラメータをinput_layer_size = 3,hidden_layer_size= 5,output_layer_size = 6として各層のサイズを設定

ネットワークの初期化 #####
*** 重み1 *** [[0.7157339 0.47869371 0.6895278 0.90320904 0.72296846] [0.0101953 0.80433874 0.42552239 0.56963189 0.75262407] [0.81782667 0.04413062 0.11799351 0.10600158 0.50511239]] shape: (3, 5)
*** 重み2 *** [[0.78080966 0.36026241 0.66807195 0.36102792 0.45743724 0.33353327] [0.10056151 0.64494681 0.93788282 0.8285677 0.12998106 0.59939957] [0.67809687 0.72251967 0.34648522 0.13991157 0.74636086 0.50303284] [0.56567254 0.8172722 0.65523419 0.28281295 0.00292972 0.85119732] [0.90057742 0.58095183 0.72126442 0.23898039 0.48826979 0.59552556]] shape: (5, 6)
*** バイアス1 *** [0.52058935 0.64584221 0.68683109 0.7211139 0.67130925] shape: (5,)
*** バイアス2 *** [0.03162837 0.31907359 0.45987903 0.61817551 0.381086 0.72657623] shape: (6,)
##### 順伝播開始 #####
*** 総入力1 *** [3.71019387 2.86560525 2.5813842 3.08159144 4.41486301] shape: (5,)
*** 中間層出力1 *** [3.71019387 2.86560525 2.5813842 3.08159144 4.41486301] shape: (5,)
*** 総入力2 *** [10.6862793 10.45230259 11.7240166 6.61975222 6.54205781 10.23241903] shape: (6,)
*** 出力1 *** [0.18930908 0.14981546 0.53438594 0.00324415 0.00300164 0.12024373] shape: (6,) 出力合計: 1.0
##### 結果表示 #####
*** 出力 *** [0.18930908 0.14981546 0.53438594 0.00324415 0.00300164 0.12024373] shape: (6,)
*** 訓練データ *** [0 0 0 1 0 0] shape: (6,)
*** 交差エントロピー誤差 *** 5.730870534218311 shape: ()

 

Section4 勾配降下法

確率的勾配降下法

  • 活性化関数にReLu関数を使用
  • 後のパラメータはサンプル通り

出力結果

学習を重ねるごとに誤差が小さくなっていることが分かった。

Section5 誤差逆伝播法

確率的勾配降下法 その2

  • 順伝播の活性化関数をシグモイド関数にしてみる
  • その他は勾配降下法のときと同じ

変更点のみ掲載

結果

シグモイド関数にすると誤差の減少がやや遅いことが分かった。

コメント

タイトルとURLをコピーしました