接著我們說明optimizer設定 。
首先,我們先得知道 training and validation 大概在做些甚麼事情。簡單的說,就是影像讀進來後,經過 model 的運算,得到一個猜測值。猜測值和目標值(label or target),經由某loss函數計算出loss值。然後回到原來的神經網路,進行weight(parameters)的優化調整,讓loss變得最小(猜測值和目標值變得最接近)。此時,便需要optimizer來解決這件事情。我們先initialize一個optimizer ,如下所述:
optimizer = optim.SGD(model.parameters(), lr=args['lr'], momentum=args['momentum'])
optim.SGD:表示我們用SGD作為optimize的方法,請自行查閱細節。由於optimize乃針對weights。所以,第一個參數就是神經網路的那堆weights-- model.parameters()。
lr:learn rate。簡單說,就是逼近谷值(loss 最小值)的步伐。越大,速度越快到達山谷。但是,太大又怕超車,衝過山谷,形成經過山谷來回跑,而停不下來。此時需要momentum來調節。
momentum:
w = - ( d Loss / d w ) * lr + m * w
( d Loss / d w )為Loss 函數對w做偏微分。m為momentum,是上次和本次w的和,若方向相同則加速。(不懂可跳過,不會影響太大)
下一章節,我們說明 for loop的部分。