44.4_使用Layer实现神经网络
44.4 使用Layer实现神经网络
现在使用Linear类来实现神经网络。这里再次尝试解决在上一个步骤中已解决的问题,即sin函数的数据集的回归。下面代码中的阴影部分是与前面代码不同的部分。
steps/step44.py
import numpy as np
fromdezero import Variable
importdezero-functionsasF
importdezero.layersasL#作为L引入
#数据集
np.random.seed(0)
$\mathbf{x} = \mathbf{np}$ .random rand(100,1)
y $=$ np.sin(2\*np.pi\*x)+np.random.randint(100,1)
l1 $=$ L.Linear(10) #指定输出大小
l2 $=$ L.Linear(1)}
def predict(x): y $=$ l1(x) y $=$ F.sigmoid(y) y $=$ 12(y)return y
lr $= 0.2$
iters $= 10000$
for i in range(aters): y_pred $=$ predict(x) loss $=$ F.mean_squared_error(y, y_pred)
l1.cleargrads()
l2.cleargrads()
loss.backup()
for l in [l1, l2]: for p in l.params(): p.data $\equiv$ lr \* p.grad.data if i % 1000 == 0: print(loss)需要注意的是参数现在由Linear实例管理。这就使得重置参数梯度的处理和更新参数的操作比之前更清晰了。
不过本步骤对Linear类是逐个进行处理的。今后如果进一步深化网络,我们将很难一个个地处理Linear类。在下一个步骤中,我们会把多个Layer合并成一个类来进行管理。