咱來走看覓
$ python3 train_neuralnet.py
train acc, test acc | 0.0903, 0.0899
train acc, test acc | 0.7732833333333333, 0.7781
train acc, test acc | 0.87545, 0.879
train acc, test acc | 0.89705, 0.8995
train acc, test acc | 0.907, 0.9103
train acc, test acc | 0.9141, 0.9184
train acc, test acc | 0.9193333333333333, 0.9221
train acc, test acc | 0.9239666666666667, 0.9249
train acc, test acc | 0.9285666666666667, 0.9291
train acc, test acc | 0.9303, 0.9318
train acc, test acc | 0.9334, 0.9352
train acc, test acc | 0.9364833333333333, 0.9377
train acc, test acc | 0.9385, 0.939
train acc, test acc | 0.9416166666666667, 0.942
train acc, test acc | 0.9425666666666667, 0.9417
train acc, test acc | 0.9447, 0.9435
train acc, test acc | 0.94585, 0.9454
紲落來閣彈出來一張圖, 看來真順利.
若有認真看原始碼 (Source code)
毋過, 咱斟酌看
train_neuralnet.py , 中方有
grad = network.gradient(x_batch, t_batch)
這敢是咱佇
遮介紹規半晡个 numerical_gradient()? 毋是呢, 伊是 gradient(), 毋是 numerical_gradient().
歡喜傷早囉!
閣看
two_layer_net.py 內面有 numerical_gradient(), 嘛有 gradient() 函式. 按呢斟酌看來,
train_nerual_net.py 並無用咱的講規半晡个 numerical_gradient().
按呢毋是佇咧裝痟个?
共伊改轉來 numerical_gradient() 奕看覓
我kā
train_neuralnet.py 的 graidient() 改轉來:
grad = network.numerical_gradient(x_batch, t_batch)
行看覓, 等真久, 干焦出現一逝:
train acc, test acc | 0.09736666666666667, 0.0982
就袂振袂動,時間堅凍.
發生啥物代誌咧? 一開始我是懷疑程式有蟲 (bug), 是毋是愛
毒蟲(
thāu-thâng)?
後來, 我用
timeit Má-tsìo 來小可看覓 numerical_gradient() 開偌濟時間, 按呢寫:
import timeit
...
time_start = timeit.default_timer()
grad = network.numerical_gradient(x_batch, t_batch)
print("grad cal: {}".format(timeit.default_timer() - time_start))
結果是:
iter_per_epoch=600.0
grad cal: 46.7133047870002
train acc, test acc | 0.09736666666666667, 0.0982
頭一逝是我另外kā iter_per_epoch 印出來. 咱佇遮看著:
行一遍 numerical_gradient() 愛四十五秒.
iter_per_epoch 是設定走幾輾, 印一擺 "train acc, test acc". 頭一擺先印, 紲落來就愛 600 擺 numerical_gradient() 了後才會閣印.
若是 45 * 600 = 27000 秒, 差不度是 7.5 點鐘才會印第二擺.
若是參考頂懸彼例使用 gradient(), 印 "train acc, test acc" 16 擺才收縮到滿意的程度 ,numerical_gradient() 就愛五工才有初步个結果。
以上个時間計算, 愛看你个電腦速度, 你算出來無一定佮我相仝 。
gradient() 佮 numerical_gradient() 這兩个方法,時間那會差遐爾濟?
gradient() 佮 numerical_gradient() 時間差蓋濟
咱若是仝款用 time_it 來算 gradient() 方法 (method) 个時間, 伊是量其約 0.01 秒, 和 45 比起來有 4000 外倍時間个精差.
gradient() 是按怎會遐爾仔緊, 伊就是用
倒退攄 (Back Propagation) 法啦!