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合并成一个类来进行管理。