本文重点
前面我们学习了普通的全连接神经网络,后面我们学习了带有激活层的全连接神经网络,本文我们继续进一步升级,我们学习带有批归一化的全连接神经网络,批归一化可以加快神经网络的训练速度,减少过拟合,具体它的原理,大家可以看我们的《每天五分钟深度学习》专栏,这里就不再详细的介绍了,下面先看一下是如何搭建模型的。
模型搭建
带有批标准层和激活函数的三层全连接神经网络
class BatchNet(nn.Module):
def __init__(self, in_dim,n_hidden_1, n_hidden_2, out_dim) :
super(BatchNet,self).__init__()
self.layer1 = nn.Sequential(nn.Linear(in_dim,n_hidden_1),nn.BatchNorm1d(n_hidden_1),nn.ReLU(True)) self.layer2=nn.Sequential(nn.Linear(n_hidden_1,n_hidden_2), nn.BatchNorm1d(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
同样使用nn.Sequential( )将 nn.BatchNormld ()组合到网络层中,注意批标准化一般放在全连接层的后面、非线性层(激活函数)的前面。
由于深度学习框架pytorch的封装作用,使得搭建网络的时候很容易封装一个批归一化层。
下面使用这个神经网络完成手写字体的识别