经典全连接神经网络
经典的全连接神经网络含有四层网络:两个隐含层,输入层和输出层。
输入层。准备数据,输入给神经网络。
隐含层。增加网络深度和复杂度,隐含层的节点数是可以调整的。节点数越多,神经网络表示能力越强,但同时参数量也会增加。
输出层。输出网络计算结果,输出层的节点数是固定的
说明:
隐含层引入非线性激活函数sigmoid是为了增加神经网络的非线性能力,举例来说,一个神经网络有四个输入x1~x4,一个输出y,采用线性变换。假设第一层的变换是z1=x1-x2和z2=x3+x4,第二层的变换是y=z1+z2。将两层的变换展开后得到 y=x1-x2+x3+x4。原始输入和最终输出之间依然是线性关系,无论中间累积了多少层线性变换均是如此。
下述代码为经典全连接神经网络的实现。完成网络结构定义后,即可训练神经网络。
# 多层全连接神经网络实现
class MNIST(fluid.dygraph.Layer):
def __init__(self, name_scope):
super(MNIST, self).__init__(name_scope)
name_scope = self.full_name()
# 定义两层全连接隐含层,输出维度是10,激活函数为sigmoid
self.fc1 = FC(name_scope, size=10, act='sigmoid') # 隐含层节点为10,可根据任务调整
self.fc2 = FC(name_scope, size=10, act='sigmoid')
# 定义一层全连接输出层,输出维度是1,不使用激活函数
self.fc3 = FC(name_scope, size=1, act=None)
# 定义网络的前向计算
def forward(self, inputs, label=None):
outputs1 = self.fc1(inputs)
outputs2 = self.fc2(outputs1)
outputs_final = self.fc3(outputs2)
return outputs_final