图像识别实战(三)----DNN讲解及代码实现
DNN-----Deep Neural Networks------深度神经网络
代码实现
class MyDNN(fluid.dygraph.Layer):
def __init__(self):
super(MyDNN,self).__init__()
self.hidden1 = Linear(100,65,act='relu')
self.hidden2 = Linear(65,65,act='relu')
self.hidden3 = Linear(65,100,act = 'relu')
self.hidden4 = Linear(3*100*100,10,act='softmax')
def forward(self,input):
x = self.hidden1(input)
# print(x)
x = self.hidden2(x)
x = self.hidden3(x)
# print('\n',x)
x = fluid.layers.reshape(x, shape=[-1,3*100*100])
y = self.hidden4(x)
return y
def __init__() 方法定义了神经网络每一层的架构架构,
def forwaid() 将每一层连接起来
init()方法中定义了四个hidden层,正如其中文索要表达的意思一样,这代表四个“隐藏层”
隐藏层
最初级的神经网络是感知机----若干个出入和一个输出
随着处理事务的逐渐复杂和计算能力的增大,神经网络逐渐发展为如下模型
图二
最左侧位输入层,最右侧位输出层,而夹在输入层和输出层的所有层次结构被称为------隐藏层
Q
上述图二神经网络有几层?
A
两层,输入层不计算在内
接上述“隐藏层”之后,我们继续讲述 “ Linear(100,65,act=‘relu’) ” 中的参数问题
100 65
100代表输入到本隐藏层的节点数,------------上一层的输出应该是100
65代表本层输出的节点数------------------------下一层的输入应该是65
act = “relu”
act代表激活函数
激活函数(Activation Function)
在神经元中,经过input(或上一层隐藏层)加权、求和 后被应用于的一个函数,
why激活函数
如果不使用激活函数,每一层的输出知识承接了上一层输入函数的线性变换,
So,无论神经网络有多少层,输出都是输入的线性组合,但是这不是我们想要的结果,如果只是线性组合,那么便失去了神经网络的优势
So,使用激活函数,可以给神经元以非线性的因素,使得神经网络可以逼近任何非线性的函数,
这样神经网络便可以应用到非线性模型中
各类激活函数
sigmoid函数
softmax函数
relu函数
def relu(x):
return x if x >0 else 0
其他函数,请点击查看
Forward
最后我们使用forward()方法将四层结构连接起来(input是输入层),
最后我们可以看见,第四层的输入是3x100x100,但是第三层的输出是100,不能对应上,
所以在forward()中便定义了,改变形状的函数。
x = fluid.layers.reshape(x, shape=[-1,3*100*100])
最后,如果有什么不懂得可以随时私信,询问我,共同努力,共同进步,老子爱你们!
了,改变形状的函数。
x = fluid.layers.reshape(x, shape=[-1,3*100*100])
如果想了解图像识别实战的全过程,请务必点击博主名字,进入主页查看全部。
别忘了留下,你的点赞、评论和关注偶~
最后,如果有什么不懂得可以随时私信,询问我,共同努力,共同进步,老子爱你们!