46.3_使用SGD类来解决问题

46.3 使用SGD类来解决问题

现在使用SGD类来解决上一个步骤中的问题。同样,下面代码的阴影部分是与上一个步骤中的代码不同的地方。

steps/step46.py

import numpy as np   
fromdezero import Variable   
fromdezero import optimizers   
importdezero-functions as F   
fromdezero.models import MLP   
np.random.seed(0)   
x  $\equiv$  np.random.randint(100,1)   
y  $=$  np.sin(2\*np.pi\*x)+np.random.randint(100,1)   
lr  $= 0.2$    
max_iter  $= 10000$    
hidden_size  $= 10$    
model  $=$  MLP((hidden_size,1))   
optimizer  $=$  optimizers.SGD(lr)   
optimizer_setup(model)   
#或者使用下一行统一进行设置   
#optimizer  $=$  optimizers.SGD(lr).setup(model)   
for i in range(max_iter): y_pred  $=$  model(x) loss  $=$  F.mean_squared_error(y,y_pred)
model.cleargrads() loss.backup() optimizer.update() if i % 1000 == 0: print(loss)

上面的代码使用了MLP类来创建模型(上一个步骤中使用的是TwoLayerNet),然后由SGD类更新参数。更新参数的代码在SGD类中。因此,调用optimizer.update()即可完成参数更新。

Optimizer类的setup方法将自身作为返回值返回。因此,我们可以编写my_OPTIMER = SGD(...) .setup(...) 这样的代码,在一行内完成调用。