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(...) 这样的代码,在一行内完成调用。