m/2015/okada/diary/2015-05-21
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
編集中
Weight Decay係数の最適なパラメーターを選択できていなかったと思ったため、再度実験。
昨日のWeight Decayの方を削除し、こちらに書き込みました。
*NeuralNet 2Layer + WeightDecay [#y5ba1e31]
Weight Decay係数の値を変化させ、どのような実行結果が得られるかを実験。&br;
**実行環境 [#nac16089]
-iMac 27inch Late2013&br;
-Core i7,3.5 GHz&br;
-OS X,Yosemite 10.10.3&br;
**実験条件 [#xd4998e8]
-2Layer (784-500-10) 慣性項付きSGD
-隠れ層のユニットの活性化関数 : sigmoid
-出力層のユニットの活性化関数 : softmax
-学習定数 eta : 0.01
-epoch : 100
-batch_size : 600
-慣性係数 a : 0.9&br;
-重み、バイアスの初期値:-0.01〜0.01&br;
-Weight Decay係数 b : 実行結果で指定
**今までに作成したプログラムの実行結果 [#t6d19f5a]
***b = 0.01 [#k883d1d5]
#pre{{
In [4]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 6.392490 | 10.736667 | 6.430000
2 | 5.768121 | 5.636667 | 4.880000
3 | 5.208296 | 4.275000 | 4.160000
4 | 4.709491 | 3.481667 | 3.670000
5 | 4.265899 | 2.965000 | 3.390000
10 | 2.689442 | 1.791667 | 2.610000
20 | 1.347860 | 1.103333 | 2.170000
30 | 0.946481 | 0.910000 | 2.110000
40 | 0.824879 | 0.823333 | 2.100000
50 | 0.786603 | 0.786667 | 2.070000
60 | 0.773552 | 0.748333 | 2.050000
70 | 0.768390 | 0.728333 | 2.060000
80 | 0.765849 | 0.716667 | 2.050000
90 | 0.764276 | 0.698333 | 2.060000
100 | 0.763124 | 0.686667 | 2.030000
CPU times: user 13min 43s, sys: 28.2 s, total: 14min 11s
Wall time: 7min 21s
}}
***b = 0.001 [#nbbee529]
#pre{{
In [51]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 0.703849 | 10.688333 | 5.930000
2 | 0.688468 | 5.456667 | 4.700000
3 | 0.684591 | 4.073333 | 4.180000
4 | 0.681780 | 3.315000 | 3.630000
5 | 0.679346 | 2.691667 | 3.300000
10 | 0.667957 | 1.223333 | 2.610000
20 | 0.639603 | 0.236667 | 2.070000
30 | 0.603478 | 0.053333 | 1.960000
40 | 0.564525 | 0.018333 | 1.860000
50 | 0.526206 | 0.010000 | 1.850000
60 | 0.490118 | 0.003333 | 1.820000
70 | 0.456912 | 0.001667 | 1.800000
80 | 0.426774 | 0.000000 | 1.780000
90 | 0.399654 | 0.000000 | 1.760000
100 | 0.375381 | 0.000000 | 1.750000
CPU times: user 13min 54s, sys: 29.2 s, total: 14min 23s
Wall time: 7min 27s
}}
***b = 0.0001 [#r4f9582f]
#pre{{
In [41]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 0.106403 | 11.375000 | 6.690000
2 | 0.087971 | 5.653333 | 5.160000
3 | 0.084093 | 4.245000 | 4.300000
4 | 0.081930 | 3.378333 | 3.820000
5 | 0.080583 | 2.728333 | 3.460000
10 | 0.078330 | 1.186667 | 2.600000
20 | 0.079128 | 0.180000 | 2.100000
30 | 0.080582 | 0.030000 | 1.920000
40 | 0.081626 | 0.008333 | 1.910000
50 | 0.082286 | 0.000000 | 1.840000
60 | 0.082671 | 0.000000 | 1.820000
70 | 0.082861 | 0.000000 | 1.800000
80 | 0.082909 | 0.000000 | 1.790000
90 | 0.082851 | 0.000000 | 1.790000
100 | 0.082712 | 0.000000 | 1.780000
CPU times: user 13min 46s, sys: 28.5 s, total: 14min 14s
Wall time: 7min 24s
}}
**theanoで作成したプログラムの実行結果 [#zf474989]
***b = 0.01 [#t9790c45]
#pre{{
In [8]: %time %run NN_decay.py
epoch | entropy | train_error | test_error
1 | 4.401366 | 11.330000 | 7.030000
2 | 1.572954 | 6.875000 | 6.360000
3 | 0.764706 | 6.343333 | 6.100000
4 | 0.525180 | 6.071667 | 5.990000
5 | 0.452497 | 5.926667 | 5.890000
10 | 0.415122 | 5.566667 | 5.550000
20 | 0.411271 | 5.415000 | 5.370000
30 | 0.410264 | 5.391667 | 5.290000
40 | 0.409804 | 5.376667 | 5.330000
50 | 0.409518 | 5.351667 | 5.370000
60 | 0.409345 | 5.336667 | 5.320000
70 | 0.409240 | 5.333333 | 5.310000
80 | 0.409157 | 5.338333 | 5.310000
90 | 0.409086 | 5.340000 | 5.320000
100 | 0.409020 | 5.336667 | 5.340000
CPU times: user 13min 43s, sys: 22.3 s, total: 14min 5s
Wall time: 6min 32s
}}
***b = 0.001 [#oa7dc2a1]
#pre{{
In [9]: %time %run NN_decay.py
epoch | entropy | train_error | test_error
1 | 1.024369 | 10.948333 | 6.290000
2 | 0.780185 | 5.775000 | 5.070000
3 | 0.680617 | 4.453333 | 4.410000
4 | 0.604532 | 3.628333 | 4.000000
5 | 0.542426 | 3.143333 | 3.520000
10 | 0.344109 | 1.798333 | 2.810000
20 | 0.189831 | 1.096667 | 2.260000
30 | 0.144194 | 0.928333 | 2.080000
40 | 0.129541 | 0.860000 | 2.030000
50 | 0.124281 | 0.813333 | 1.990000
60 | 0.122050 | 0.791667 | 1.950000
70 | 0.120890 | 0.753333 | 1.930000
80 | 0.120160 | 0.748333 | 1.930000
90 | 0.119633 | 0.733333 | 1.890000
100 | 0.119216 | 0.721667 | 1.870000
CPU times: user 13min 49s, sys: 22.2 s, total: 14min 11s
Wall time: 6min 30s
}}
***b = 0.0001 [#t543a305]
#pre{{
In [46]: %time %run NN_decay.py
epoch | entropy | train_error | test_error
1 | 0.450341 | 10.946667 | 6.300000
2 | 0.264335 | 5.511667 | 4.840000
3 | 0.218640 | 4.225000 | 4.170000
4 | 0.190233 | 3.348333 | 3.540000
5 | 0.170203 | 2.728333 | 3.260000
10 | 0.119268 | 1.228333 | 2.530000
20 | 0.085757 | 0.251667 | 2.140000
30 | 0.073177 | 0.060000 | 2.050000
40 | 0.065809 | 0.016667 | 1.950000
50 | 0.060332 | 0.008333 | 1.960000
60 | 0.055835 | 0.005000 | 1.900000
70 | 0.051995 | 0.005000 | 1.900000
80 | 0.048658 | 0.003333 | 1.880000
90 | 0.045734 | 0.000000 | 1.850000
100 | 0.043160 | 0.000000 | 1.850000
CPU times: user 14min 25s, sys: 22.8 s, total: 14min 48s
Wall time: 6min 31s
}}
**考察 [#i7590e05]
今までに作成したプログラムとtheanoで作成したプログラムでは、&br;
パラメータにより実行結果が異なった。&br;
***今までに作成したプログラムの実行結果 [#da138a93]
-b = 0.01の時&br;
学習データの誤識別率が0まで下がらず、過学習が起こっていない。&br;
&br;
-b = 0.001、0.0001の時&br;
Weight Decay項の影響が小さいため、学習データの誤識別率が0まで下がる。&br;
過学習が起こっている。
***theanoで作成したプログラムの実行結果 [#s8acb3d3]
-b = 0.01の時&br;
Weight Decayの影響が大きく、学習データが下がっていない。&br;
&br;
-b = 0.001の時&br;
学習データの誤識別率が0まで下がっておらず、誤識別率が小さい。&br;
&br;
-b = 0.0001の時&br;
Weight Decay項の影響が小さいため、学習データの誤識別率が0まで下がる。&br;
過学習が起こっている。&br;
&br;
以降、Weight Decayを用いる実験では、過学習を防ぐため、今までに作成したものでは、0.01、theanoでは0.001の値を用いる。
*Neural Net 3Layer [#tfde45d6]
**実験目的 [#i99c8d99]
-今までに作成したものとtheanoで作成したものを比較するため
-Neural Netの中間層の数を増やすとどのように変化するか結果を残しておくため
-活性化関数を変えて実験結果を残しておくため
**実行環境 [#d5bfe9aa]
上記と同じ
**実験条件 [#kae8a41c]
-3Layer(784-500-300-10)
-隠れ層の活性化関数 : sigmoid or ReLU
-出力層の活性化関数 : softmax
-学習定数 eta : 0.01
-epoch : 100
-batch_size : 600
-慣性係数 a : 0.9
-重み、バイアスの初期値 : -0.01〜0.01
-Weight Decay係数 b:実験結果で指定
**今までに作成したプログラム [#x32075b7]
***Weight Decayあり(活性化関数 sigmoid)[#b8dba3ad]
#pre{{
In [52]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 8.884035 | 17.865000 | 8.090000
2 | 8.111293 | 7.563333 | 6.290000
3 | 7.358630 | 5.920000 | 5.380000
4 | 6.679654 | 4.973333 | 4.790000
5 | 6.074097 | 4.261667 | 4.360000
10 | 3.922662 | 2.455000 | 3.200000
20 | 2.093693 | 1.550000 | 2.590000
30 | 1.546482 | 1.265000 | 2.410000
40 | 1.381995 | 1.163333 | 2.270000
50 | 1.331041 | 1.093333 | 2.260000
60 | 1.314020 | 1.046667 | 2.200000
70 | 1.307323 | 1.013333 | 2.170000
80 | 1.303882 | 0.993333 | 2.150000
90 | 1.301599 | 0.978333 | 2.130000
100 | 1.299867 | 0.946667 | 2.140000
CPU times: user 19min 53s, sys: 4min 51s, total: 24min 45s
Wall time: 15min 13s
}}
***Weight Decayなし(活性化関数 sigmoid)[#qc4db0be]
#pre{{
In [65]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 0.069012 | 17.913333 | 8.340000
2 | 0.026259 | 7.471667 | 6.070000
3 | 0.020004 | 5.736667 | 5.280000
4 | 0.016225 | 4.640000 | 4.560000
5 | 0.013538 | 3.841667 | 4.070000
10 | 0.006491 | 1.636667 | 2.730000
20 | 0.001943 | 0.258333 | 2.290000
30 | 0.000773 | 0.028333 | 2.070000
40 | 0.000414 | 0.003333 | 2.030000
50 | 0.000267 | 0.000000 | 1.980000
60 | 0.000193 | 0.000000 | 1.970000
70 | 0.000149 | 0.000000 | 1.970000
80 | 0.000121 | 0.000000 | 1.950000
90 | 0.000101 | 0.000000 | 1.940000
100 | 0.000086 | 0.000000 | 1.940000
CPU times: user 17min 22s, sys: 1min 42s, total: 19min 5s
Wall time: 9min 39s
}}
***Weight Decayあり(活性化関数 ReLU) [#kd9d21d6]
#pre{{
In [53]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 8.650674 | 6.735000 | 3.720000
2 | 7.748694 | 2.493333 | 2.800000
3 | 6.948976 | 1.445000 | 2.400000
4 | 6.236670 | 0.870000 | 2.320000
5 | 5.599769 | 0.555000 | 2.220000
10 | 3.291148 | 0.051667 | 1.930000
20 | 1.293320 | 0.021667 | 1.880000
30 | 0.671841 | 0.015000 | 1.890000
40 | 0.461074 | 0.010000 | 1.800000
50 | 0.450549 | 0.048333 | 1.620000
60 | 0.358230 | 0.005000 | 1.690000
70 | 0.340138 | 0.003333 | 1.700000
80 | 0.333156 | 0.001667 | 1.660000
90 | 0.329685 | 0.001667 | 1.660000
100 | 0.327119 | 0.001667 | 1.640000
CPU times: user 19min 19s, sys: 3min 30s, total: 22min 50s
Wall time: 13min 25s
}}
***Weight Decayなし(活性化関数 ReLU) [#t2fece20]
#pre{{
In [64]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 0.024300 | 7.020000 | 3.720000
2 | 0.008493 | 2.565000 | 2.950000
3 | 0.004810 | 1.411667 | 2.610000
4 | 0.002852 | 0.798333 | 2.430000
5 | 0.001685 | 0.380000 | 2.330000
10 | 0.000207 | 0.023333 | 1.920000
20 | 0.000034 | 0.000000 | 1.810000
30 | 0.000020 | 0.000000 | 1.760000
40 | 0.000014 | 0.000000 | 1.770000
50 | 0.000011 | 0.000000 | 1.780000
60 | 0.000009 | 0.000000 | 1.800000
70 | 0.000007 | 0.000000 | 1.810000
80 | 0.000006 | 0.000000 | 1.800000
90 | 0.000006 | 0.000000 | 1.800000
100 | 0.000005 | 0.000000 | 1.790000
CPU times: user 17min 3s, sys: 1min 27s, total: 18min 31s
Wall time: 9min 7s
}}
**theanoで作成したプログラム [#m5b11c61]
***Weight Decayあり(活性化関数 sigmoid)[#b349e2f9]
#pre{{
In [58]: %time %run mlp.py
epoch | entropy | train_error | test_error
1 | 1.579382 | 17.600000 | 8.410000
2 | 1.083034 | 7.681667 | 6.230000
3 | 0.949035 | 6.006667 | 5.220000
4 | 0.846863 | 4.965000 | 4.680000
5 | 0.762710 | 4.241667 | 4.340000
10 | 0.490998 | 2.473333 | 3.140000
20 | 0.278898 | 1.490000 | 2.510000
30 | 0.216320 | 1.211667 | 2.300000
40 | 0.196407 | 1.096667 | 2.170000
50 | 0.189345 | 1.025000 | 2.160000
60 | 0.186361 | 0.976667 | 2.150000
70 | 0.184787 | 0.946667 | 2.160000
80 | 0.183766 | 0.931667 | 2.130000
90 | 0.183005 | 0.916667 | 2.120000
100 | 0.182394 | 0.905000 | 2.140000
CPU times: user 17min 25s, sys: 28.9 s, total: 17min 54s
Wall time: 8min 35s
}}
***Weight Decayなし(活性化関数 sigmoid)[#s8cbad62]
#pre{{
In [59]: %time %run mlp.py
epoch | entropy | train_error | test_error
1 | 0.685825 | 17.843333 | 8.420000
2 | 0.264251 | 7.495000 | 6.090000
3 | 0.201963 | 5.753333 | 5.220000
4 | 0.163665 | 4.611667 | 4.530000
5 | 0.136481 | 3.820000 | 3.980000
10 | 0.065562 | 1.655000 | 2.850000
20 | 0.019226 | 0.233333 | 2.170000
30 | 0.007452 | 0.030000 | 2.030000
40 | 0.003986 | 0.001667 | 1.950000
50 | 0.002592 | 0.000000 | 1.920000
60 | 0.001880 | 0.000000 | 1.890000
70 | 0.001457 | 0.000000 | 1.890000
80 | 0.001180 | 0.000000 | 1.890000
90 | 0.000986 | 0.000000 | 1.840000
100 | 0.000843 | 0.000000 | 1.840000
CPU times: user 13min 49s, sys: 24.6 s, total: 14min 14s
Wall time: 5min 20s
}}
***Weight Decayあり(活性化関数 ReLU) [#bd5416b4]
#pre{{
In [57]: %time %run mlp.py
epoch | entropy | train_error | test_error
1 | 1.106697 | 6.983333 | 3.780000
2 | 0.862527 | 2.598333 | 3.050000
3 | 0.749084 | 1.513333 | 2.790000
4 | 0.659796 | 0.871667 | 2.330000
5 | 0.585579 | 0.506667 | 2.440000
10 | 0.338885 | 0.038333 | 2.160000
20 | 0.137078 | 0.016667 | 2.010000
30 | 0.073795 | 0.005000 | 1.870000
40 | 0.052264 | 0.006667 | 1.900000
50 | 0.044299 | 0.005000 | 1.960000
60 | 0.041144 | 0.003333 | 1.910000
70 | 0.039787 | 0.003333 | 1.850000
80 | 0.039088 | 0.003333 | 1.900000
90 | 0.038611 | 0.005000 | 1.800000
100 | 0.038338 | 0.003333 | 1.770000
CPU times: user 17min 52s, sys: 29.6 s, total: 18min 22s
Wall time: 8min 28s
}}
***Weight Decayなし(活性化関数 ReLU) [#t3c6e0c2]
#pre{{
In [60]: %time %run mlp.py
epoch | entropy | train_error | test_error
1 | 0.230067 | 6.863333 | 3.250000
2 | 0.081633 | 2.466667 | 2.750000
3 | 0.047992 | 1.438333 | 2.610000
4 | 0.029474 | 0.801667 | 2.590000
5 | 0.018490 | 0.486667 | 2.370000
10 | 0.001460 | 0.006667 | 1.820000
20 | 0.000332 | 0.000000 | 1.850000
30 | 0.000195 | 0.000000 | 1.850000
40 | 0.000138 | 0.000000 | 1.830000
50 | 0.000106 | 0.000000 | 1.840000
60 | 0.000086 | 0.000000 | 1.840000
70 | 0.000072 | 0.000000 | 1.820000
80 | 0.000062 | 0.000000 | 1.830000
90 | 0.000054 | 0.000000 | 1.830000
100 | 0.000048 | 0.000000 | 1.840000
CPU times: user 13min 56s, sys: 23.2 s, total: 14min 19s
Wall time: 5min 9s
}}
**考察 [#qae27c1c]
***今までに作成したプログラムとtheanoで作成したプログラムを比較 [#g0f09efe]
Weight Decayありの場合過学習を起こさないように&br;
Weight Decay項の値を今までに作成したプログラムと&br;
theanoで作成したプログラムで変えているため、きちんとした比較はできていないです。&br;
&br;
theanoで作成したプログラムよりも今までに作成したプログラムのほうが&br;
Wall timeが倍近くかかっている。&br;
&br;
それぞれのWeight Decayの有無、活性化関数で比較&br;
-Weight Decayあり(sigmoid)&br;
学習データの誤識別率、テストデータの誤識別率はほぼ変わらない。&br;
&br;
&br;
-Weight Decayなし(sigmoid)&br;
学習データの誤識別率、テストデータの誤識別率はほぼ変わらない。&br;
大体同じepoch数で過学習を起こしている。&br;
&br;
&br;
-Weight Decayあり(ReLU)&br;
学習データ、テストデータの誤識別率に変動がみられた。&br;
なぜ、このようになるのか考え中。&br;
&br;
&br;
-Weight Decayなし(ReLU)&br;
学習データの誤識別率、テストデータの誤識別率はほぼ変わらない。&br;
&br;
*実験を行った結論 [#sb67027b]
-学習データ、テストデータの誤識別率に違いは大きな違いは見られなかった。&br;
-交差エントロピーの値がtheanoで作成したプログラムの方が大きい。&br;
-計算量が多くなると、theanoの方が処理が終わるまでの時間が早かった。&br;
終了行:
編集中
Weight Decay係数の最適なパラメーターを選択できていなかったと思ったため、再度実験。
昨日のWeight Decayの方を削除し、こちらに書き込みました。
*NeuralNet 2Layer + WeightDecay [#y5ba1e31]
Weight Decay係数の値を変化させ、どのような実行結果が得られるかを実験。&br;
**実行環境 [#nac16089]
-iMac 27inch Late2013&br;
-Core i7,3.5 GHz&br;
-OS X,Yosemite 10.10.3&br;
**実験条件 [#xd4998e8]
-2Layer (784-500-10) 慣性項付きSGD
-隠れ層のユニットの活性化関数 : sigmoid
-出力層のユニットの活性化関数 : softmax
-学習定数 eta : 0.01
-epoch : 100
-batch_size : 600
-慣性係数 a : 0.9&br;
-重み、バイアスの初期値:-0.01〜0.01&br;
-Weight Decay係数 b : 実行結果で指定
**今までに作成したプログラムの実行結果 [#t6d19f5a]
***b = 0.01 [#k883d1d5]
#pre{{
In [4]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 6.392490 | 10.736667 | 6.430000
2 | 5.768121 | 5.636667 | 4.880000
3 | 5.208296 | 4.275000 | 4.160000
4 | 4.709491 | 3.481667 | 3.670000
5 | 4.265899 | 2.965000 | 3.390000
10 | 2.689442 | 1.791667 | 2.610000
20 | 1.347860 | 1.103333 | 2.170000
30 | 0.946481 | 0.910000 | 2.110000
40 | 0.824879 | 0.823333 | 2.100000
50 | 0.786603 | 0.786667 | 2.070000
60 | 0.773552 | 0.748333 | 2.050000
70 | 0.768390 | 0.728333 | 2.060000
80 | 0.765849 | 0.716667 | 2.050000
90 | 0.764276 | 0.698333 | 2.060000
100 | 0.763124 | 0.686667 | 2.030000
CPU times: user 13min 43s, sys: 28.2 s, total: 14min 11s
Wall time: 7min 21s
}}
***b = 0.001 [#nbbee529]
#pre{{
In [51]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 0.703849 | 10.688333 | 5.930000
2 | 0.688468 | 5.456667 | 4.700000
3 | 0.684591 | 4.073333 | 4.180000
4 | 0.681780 | 3.315000 | 3.630000
5 | 0.679346 | 2.691667 | 3.300000
10 | 0.667957 | 1.223333 | 2.610000
20 | 0.639603 | 0.236667 | 2.070000
30 | 0.603478 | 0.053333 | 1.960000
40 | 0.564525 | 0.018333 | 1.860000
50 | 0.526206 | 0.010000 | 1.850000
60 | 0.490118 | 0.003333 | 1.820000
70 | 0.456912 | 0.001667 | 1.800000
80 | 0.426774 | 0.000000 | 1.780000
90 | 0.399654 | 0.000000 | 1.760000
100 | 0.375381 | 0.000000 | 1.750000
CPU times: user 13min 54s, sys: 29.2 s, total: 14min 23s
Wall time: 7min 27s
}}
***b = 0.0001 [#r4f9582f]
#pre{{
In [41]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 0.106403 | 11.375000 | 6.690000
2 | 0.087971 | 5.653333 | 5.160000
3 | 0.084093 | 4.245000 | 4.300000
4 | 0.081930 | 3.378333 | 3.820000
5 | 0.080583 | 2.728333 | 3.460000
10 | 0.078330 | 1.186667 | 2.600000
20 | 0.079128 | 0.180000 | 2.100000
30 | 0.080582 | 0.030000 | 1.920000
40 | 0.081626 | 0.008333 | 1.910000
50 | 0.082286 | 0.000000 | 1.840000
60 | 0.082671 | 0.000000 | 1.820000
70 | 0.082861 | 0.000000 | 1.800000
80 | 0.082909 | 0.000000 | 1.790000
90 | 0.082851 | 0.000000 | 1.790000
100 | 0.082712 | 0.000000 | 1.780000
CPU times: user 13min 46s, sys: 28.5 s, total: 14min 14s
Wall time: 7min 24s
}}
**theanoで作成したプログラムの実行結果 [#zf474989]
***b = 0.01 [#t9790c45]
#pre{{
In [8]: %time %run NN_decay.py
epoch | entropy | train_error | test_error
1 | 4.401366 | 11.330000 | 7.030000
2 | 1.572954 | 6.875000 | 6.360000
3 | 0.764706 | 6.343333 | 6.100000
4 | 0.525180 | 6.071667 | 5.990000
5 | 0.452497 | 5.926667 | 5.890000
10 | 0.415122 | 5.566667 | 5.550000
20 | 0.411271 | 5.415000 | 5.370000
30 | 0.410264 | 5.391667 | 5.290000
40 | 0.409804 | 5.376667 | 5.330000
50 | 0.409518 | 5.351667 | 5.370000
60 | 0.409345 | 5.336667 | 5.320000
70 | 0.409240 | 5.333333 | 5.310000
80 | 0.409157 | 5.338333 | 5.310000
90 | 0.409086 | 5.340000 | 5.320000
100 | 0.409020 | 5.336667 | 5.340000
CPU times: user 13min 43s, sys: 22.3 s, total: 14min 5s
Wall time: 6min 32s
}}
***b = 0.001 [#oa7dc2a1]
#pre{{
In [9]: %time %run NN_decay.py
epoch | entropy | train_error | test_error
1 | 1.024369 | 10.948333 | 6.290000
2 | 0.780185 | 5.775000 | 5.070000
3 | 0.680617 | 4.453333 | 4.410000
4 | 0.604532 | 3.628333 | 4.000000
5 | 0.542426 | 3.143333 | 3.520000
10 | 0.344109 | 1.798333 | 2.810000
20 | 0.189831 | 1.096667 | 2.260000
30 | 0.144194 | 0.928333 | 2.080000
40 | 0.129541 | 0.860000 | 2.030000
50 | 0.124281 | 0.813333 | 1.990000
60 | 0.122050 | 0.791667 | 1.950000
70 | 0.120890 | 0.753333 | 1.930000
80 | 0.120160 | 0.748333 | 1.930000
90 | 0.119633 | 0.733333 | 1.890000
100 | 0.119216 | 0.721667 | 1.870000
CPU times: user 13min 49s, sys: 22.2 s, total: 14min 11s
Wall time: 6min 30s
}}
***b = 0.0001 [#t543a305]
#pre{{
In [46]: %time %run NN_decay.py
epoch | entropy | train_error | test_error
1 | 0.450341 | 10.946667 | 6.300000
2 | 0.264335 | 5.511667 | 4.840000
3 | 0.218640 | 4.225000 | 4.170000
4 | 0.190233 | 3.348333 | 3.540000
5 | 0.170203 | 2.728333 | 3.260000
10 | 0.119268 | 1.228333 | 2.530000
20 | 0.085757 | 0.251667 | 2.140000
30 | 0.073177 | 0.060000 | 2.050000
40 | 0.065809 | 0.016667 | 1.950000
50 | 0.060332 | 0.008333 | 1.960000
60 | 0.055835 | 0.005000 | 1.900000
70 | 0.051995 | 0.005000 | 1.900000
80 | 0.048658 | 0.003333 | 1.880000
90 | 0.045734 | 0.000000 | 1.850000
100 | 0.043160 | 0.000000 | 1.850000
CPU times: user 14min 25s, sys: 22.8 s, total: 14min 48s
Wall time: 6min 31s
}}
**考察 [#i7590e05]
今までに作成したプログラムとtheanoで作成したプログラムでは、&br;
パラメータにより実行結果が異なった。&br;
***今までに作成したプログラムの実行結果 [#da138a93]
-b = 0.01の時&br;
学習データの誤識別率が0まで下がらず、過学習が起こっていない。&br;
&br;
-b = 0.001、0.0001の時&br;
Weight Decay項の影響が小さいため、学習データの誤識別率が0まで下がる。&br;
過学習が起こっている。
***theanoで作成したプログラムの実行結果 [#s8acb3d3]
-b = 0.01の時&br;
Weight Decayの影響が大きく、学習データが下がっていない。&br;
&br;
-b = 0.001の時&br;
学習データの誤識別率が0まで下がっておらず、誤識別率が小さい。&br;
&br;
-b = 0.0001の時&br;
Weight Decay項の影響が小さいため、学習データの誤識別率が0まで下がる。&br;
過学習が起こっている。&br;
&br;
以降、Weight Decayを用いる実験では、過学習を防ぐため、今までに作成したものでは、0.01、theanoでは0.001の値を用いる。
*Neural Net 3Layer [#tfde45d6]
**実験目的 [#i99c8d99]
-今までに作成したものとtheanoで作成したものを比較するため
-Neural Netの中間層の数を増やすとどのように変化するか結果を残しておくため
-活性化関数を変えて実験結果を残しておくため
**実行環境 [#d5bfe9aa]
上記と同じ
**実験条件 [#kae8a41c]
-3Layer(784-500-300-10)
-隠れ層の活性化関数 : sigmoid or ReLU
-出力層の活性化関数 : softmax
-学習定数 eta : 0.01
-epoch : 100
-batch_size : 600
-慣性係数 a : 0.9
-重み、バイアスの初期値 : -0.01〜0.01
-Weight Decay係数 b:実験結果で指定
**今までに作成したプログラム [#x32075b7]
***Weight Decayあり(活性化関数 sigmoid)[#b8dba3ad]
#pre{{
In [52]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 8.884035 | 17.865000 | 8.090000
2 | 8.111293 | 7.563333 | 6.290000
3 | 7.358630 | 5.920000 | 5.380000
4 | 6.679654 | 4.973333 | 4.790000
5 | 6.074097 | 4.261667 | 4.360000
10 | 3.922662 | 2.455000 | 3.200000
20 | 2.093693 | 1.550000 | 2.590000
30 | 1.546482 | 1.265000 | 2.410000
40 | 1.381995 | 1.163333 | 2.270000
50 | 1.331041 | 1.093333 | 2.260000
60 | 1.314020 | 1.046667 | 2.200000
70 | 1.307323 | 1.013333 | 2.170000
80 | 1.303882 | 0.993333 | 2.150000
90 | 1.301599 | 0.978333 | 2.130000
100 | 1.299867 | 0.946667 | 2.140000
CPU times: user 19min 53s, sys: 4min 51s, total: 24min 45s
Wall time: 15min 13s
}}
***Weight Decayなし(活性化関数 sigmoid)[#qc4db0be]
#pre{{
In [65]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 0.069012 | 17.913333 | 8.340000
2 | 0.026259 | 7.471667 | 6.070000
3 | 0.020004 | 5.736667 | 5.280000
4 | 0.016225 | 4.640000 | 4.560000
5 | 0.013538 | 3.841667 | 4.070000
10 | 0.006491 | 1.636667 | 2.730000
20 | 0.001943 | 0.258333 | 2.290000
30 | 0.000773 | 0.028333 | 2.070000
40 | 0.000414 | 0.003333 | 2.030000
50 | 0.000267 | 0.000000 | 1.980000
60 | 0.000193 | 0.000000 | 1.970000
70 | 0.000149 | 0.000000 | 1.970000
80 | 0.000121 | 0.000000 | 1.950000
90 | 0.000101 | 0.000000 | 1.940000
100 | 0.000086 | 0.000000 | 1.940000
CPU times: user 17min 22s, sys: 1min 42s, total: 19min 5s
Wall time: 9min 39s
}}
***Weight Decayあり(活性化関数 ReLU) [#kd9d21d6]
#pre{{
In [53]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 8.650674 | 6.735000 | 3.720000
2 | 7.748694 | 2.493333 | 2.800000
3 | 6.948976 | 1.445000 | 2.400000
4 | 6.236670 | 0.870000 | 2.320000
5 | 5.599769 | 0.555000 | 2.220000
10 | 3.291148 | 0.051667 | 1.930000
20 | 1.293320 | 0.021667 | 1.880000
30 | 0.671841 | 0.015000 | 1.890000
40 | 0.461074 | 0.010000 | 1.800000
50 | 0.450549 | 0.048333 | 1.620000
60 | 0.358230 | 0.005000 | 1.690000
70 | 0.340138 | 0.003333 | 1.700000
80 | 0.333156 | 0.001667 | 1.660000
90 | 0.329685 | 0.001667 | 1.660000
100 | 0.327119 | 0.001667 | 1.640000
CPU times: user 19min 19s, sys: 3min 30s, total: 22min 50s
Wall time: 13min 25s
}}
***Weight Decayなし(活性化関数 ReLU) [#t2fece20]
#pre{{
In [64]: %time %run MLP_np.py
epoch | entropy | train_error | test_error
1 | 0.024300 | 7.020000 | 3.720000
2 | 0.008493 | 2.565000 | 2.950000
3 | 0.004810 | 1.411667 | 2.610000
4 | 0.002852 | 0.798333 | 2.430000
5 | 0.001685 | 0.380000 | 2.330000
10 | 0.000207 | 0.023333 | 1.920000
20 | 0.000034 | 0.000000 | 1.810000
30 | 0.000020 | 0.000000 | 1.760000
40 | 0.000014 | 0.000000 | 1.770000
50 | 0.000011 | 0.000000 | 1.780000
60 | 0.000009 | 0.000000 | 1.800000
70 | 0.000007 | 0.000000 | 1.810000
80 | 0.000006 | 0.000000 | 1.800000
90 | 0.000006 | 0.000000 | 1.800000
100 | 0.000005 | 0.000000 | 1.790000
CPU times: user 17min 3s, sys: 1min 27s, total: 18min 31s
Wall time: 9min 7s
}}
**theanoで作成したプログラム [#m5b11c61]
***Weight Decayあり(活性化関数 sigmoid)[#b349e2f9]
#pre{{
In [58]: %time %run mlp.py
epoch | entropy | train_error | test_error
1 | 1.579382 | 17.600000 | 8.410000
2 | 1.083034 | 7.681667 | 6.230000
3 | 0.949035 | 6.006667 | 5.220000
4 | 0.846863 | 4.965000 | 4.680000
5 | 0.762710 | 4.241667 | 4.340000
10 | 0.490998 | 2.473333 | 3.140000
20 | 0.278898 | 1.490000 | 2.510000
30 | 0.216320 | 1.211667 | 2.300000
40 | 0.196407 | 1.096667 | 2.170000
50 | 0.189345 | 1.025000 | 2.160000
60 | 0.186361 | 0.976667 | 2.150000
70 | 0.184787 | 0.946667 | 2.160000
80 | 0.183766 | 0.931667 | 2.130000
90 | 0.183005 | 0.916667 | 2.120000
100 | 0.182394 | 0.905000 | 2.140000
CPU times: user 17min 25s, sys: 28.9 s, total: 17min 54s
Wall time: 8min 35s
}}
***Weight Decayなし(活性化関数 sigmoid)[#s8cbad62]
#pre{{
In [59]: %time %run mlp.py
epoch | entropy | train_error | test_error
1 | 0.685825 | 17.843333 | 8.420000
2 | 0.264251 | 7.495000 | 6.090000
3 | 0.201963 | 5.753333 | 5.220000
4 | 0.163665 | 4.611667 | 4.530000
5 | 0.136481 | 3.820000 | 3.980000
10 | 0.065562 | 1.655000 | 2.850000
20 | 0.019226 | 0.233333 | 2.170000
30 | 0.007452 | 0.030000 | 2.030000
40 | 0.003986 | 0.001667 | 1.950000
50 | 0.002592 | 0.000000 | 1.920000
60 | 0.001880 | 0.000000 | 1.890000
70 | 0.001457 | 0.000000 | 1.890000
80 | 0.001180 | 0.000000 | 1.890000
90 | 0.000986 | 0.000000 | 1.840000
100 | 0.000843 | 0.000000 | 1.840000
CPU times: user 13min 49s, sys: 24.6 s, total: 14min 14s
Wall time: 5min 20s
}}
***Weight Decayあり(活性化関数 ReLU) [#bd5416b4]
#pre{{
In [57]: %time %run mlp.py
epoch | entropy | train_error | test_error
1 | 1.106697 | 6.983333 | 3.780000
2 | 0.862527 | 2.598333 | 3.050000
3 | 0.749084 | 1.513333 | 2.790000
4 | 0.659796 | 0.871667 | 2.330000
5 | 0.585579 | 0.506667 | 2.440000
10 | 0.338885 | 0.038333 | 2.160000
20 | 0.137078 | 0.016667 | 2.010000
30 | 0.073795 | 0.005000 | 1.870000
40 | 0.052264 | 0.006667 | 1.900000
50 | 0.044299 | 0.005000 | 1.960000
60 | 0.041144 | 0.003333 | 1.910000
70 | 0.039787 | 0.003333 | 1.850000
80 | 0.039088 | 0.003333 | 1.900000
90 | 0.038611 | 0.005000 | 1.800000
100 | 0.038338 | 0.003333 | 1.770000
CPU times: user 17min 52s, sys: 29.6 s, total: 18min 22s
Wall time: 8min 28s
}}
***Weight Decayなし(活性化関数 ReLU) [#t3c6e0c2]
#pre{{
In [60]: %time %run mlp.py
epoch | entropy | train_error | test_error
1 | 0.230067 | 6.863333 | 3.250000
2 | 0.081633 | 2.466667 | 2.750000
3 | 0.047992 | 1.438333 | 2.610000
4 | 0.029474 | 0.801667 | 2.590000
5 | 0.018490 | 0.486667 | 2.370000
10 | 0.001460 | 0.006667 | 1.820000
20 | 0.000332 | 0.000000 | 1.850000
30 | 0.000195 | 0.000000 | 1.850000
40 | 0.000138 | 0.000000 | 1.830000
50 | 0.000106 | 0.000000 | 1.840000
60 | 0.000086 | 0.000000 | 1.840000
70 | 0.000072 | 0.000000 | 1.820000
80 | 0.000062 | 0.000000 | 1.830000
90 | 0.000054 | 0.000000 | 1.830000
100 | 0.000048 | 0.000000 | 1.840000
CPU times: user 13min 56s, sys: 23.2 s, total: 14min 19s
Wall time: 5min 9s
}}
**考察 [#qae27c1c]
***今までに作成したプログラムとtheanoで作成したプログラムを比較 [#g0f09efe]
Weight Decayありの場合過学習を起こさないように&br;
Weight Decay項の値を今までに作成したプログラムと&br;
theanoで作成したプログラムで変えているため、きちんとした比較はできていないです。&br;
&br;
theanoで作成したプログラムよりも今までに作成したプログラムのほうが&br;
Wall timeが倍近くかかっている。&br;
&br;
それぞれのWeight Decayの有無、活性化関数で比較&br;
-Weight Decayあり(sigmoid)&br;
学習データの誤識別率、テストデータの誤識別率はほぼ変わらない。&br;
&br;
&br;
-Weight Decayなし(sigmoid)&br;
学習データの誤識別率、テストデータの誤識別率はほぼ変わらない。&br;
大体同じepoch数で過学習を起こしている。&br;
&br;
&br;
-Weight Decayあり(ReLU)&br;
学習データ、テストデータの誤識別率に変動がみられた。&br;
なぜ、このようになるのか考え中。&br;
&br;
&br;
-Weight Decayなし(ReLU)&br;
学習データの誤識別率、テストデータの誤識別率はほぼ変わらない。&br;
&br;
*実験を行った結論 [#sb67027b]
-学習データ、テストデータの誤識別率に違いは大きな違いは見られなかった。&br;
-交差エントロピーの値がtheanoで作成したプログラムの方が大きい。&br;
-計算量が多くなると、theanoの方が処理が終わるまでの時間が早かった。&br;
ページ名: