本文重点
前面我们学习了简单的全连接神经网络,之所以说他简单的原因是我们只是使用了全连接层的堆叠,本文中我们更近一步,我们在层与层之间我们使用激活函数,来看一下这样的神经网络是如何堆叠的。
网络模型的搭建
class ActivationNet(nn.Module) :
def __init__ (self, in_dim, n_hidden_1, n_hidden_2, out_dim) :
super(ActivationNet, self).__init__()
self.layer1= nn.Sequential( nn.Linear(in_dim,n_hidden_1), nn.ReLU(True))
self.layer2 =nn.Sequential( nn.Linear(n_hidden_1,n_hidden_2), nn.ReLU(True)) self.layer3=nn.Sequential(nn.Linear(n_hidden_2, out_dim))
def forward(self, x):
x = self.layer1(x)
x = self.layer2(x)
x = self.layer3(x)
return x
带有ReLu激活函数的三层全连接神经网络,我们可以看出上面的代码是使用了非线性的映射,也就是添加了激活函数,其中Sequential的作用就是将网络的层组合到一起,比如上面将 nn.Linear ()和nn.ReLU组合到 一起作为 self.layer。我们可以看到我们只是将layer1和layer2添加了激活函数,没有将layer3添加激活函数,这是因为我们后面使用交叉熵损失函数,它会自动使用softmax对数据进行处理,这个前面我们介绍激活函数的时候已经进行了介绍了
基于该网络模型完成手写字体识别
就网络模型不一样,其它的处理方式和前面的代码是一样的,这里关于代码不再进行解释了