三层神经网络的推理过程实现(前向处理)
程序员文章站
2022-03-10 15:33:13
...
# 1.三层神经网络推理过程示意图
上图从左到右依次是输入层、隐藏层1、隐藏层2和输出层。由于有权重的只有三层,故称之为三层神经网络。
x1,x2表示整个神经网络的输入信号,y1,y2表示整个神经网络的输出信号。内含1的神经元以及bij标识是为了表示偏置,bij表示第i层偏置的第j个元素。
比较大的神经元中aij表示它的输入信号,zij表示它的输出信号。图中的直线均表示从左到右的箭头,各层权重的具体数据没有在箭头上表示出来,但它们是存在的。aij就是指向它所有箭头所表示的加权和,将aij经过**函数转化就得到zij。
将输入信号x1,x2通过如图三层神经网络的推理处理,就可以得到该神经网络的推理结果y1,y2。
# 2.三层神经网络推理过程的实现以及解析
import numpy as np
from sigmoid import sigmoid # 从sigmoid.py文件中导入sigmoid函数
from identity import identity_function # 从identity.py文件中导入identity_function函数
#三层神经网络的实现
#初始化函数
def init_network():
network={} #定义一个字典变量network
network['W1']=np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]]) #定义标记W1为一个二维数组,表示神经网络第一层的权重
network['b1']=np.array([0.1,0.2,0.3]) #定义标记b1为一个一维数组,表示神经网络第一层的偏置
network['W2']=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
network['b2']=np.array([0.1,0.2])
network['W3']=np.array([[0.1,0.3],[0.2,0.4]])
network['b3']=np.array([0.1,0.2])
return network #返回字典变量network
#推理函数
def predict(network,x): #推理函数的入口参数为一个字典变量和一个输入层信号数组
W1,W2,W3=network['W1'],network['W2'],network['W3'] #通过已知的字典变量定义各层权重和偏置
b1,b2,b3=network['b1'],network['b2'],network['b3']
a1=np.dot(x,W1)+b1 #计算加权和a1(即信号矩阵x与第一层权重矩阵W1相乘,再加上第一层偏置矩阵b1)
z1=sigmoid(a1) #将加权和a1通过**函数sigmoid转换,得到隐藏层1的输出信号数组z1
a2=np.dot(z1,W2)+b2 #计算加权和a2(即信号矩阵z1与第二层权重矩阵W2相乘,再加上第二层偏置矩阵b2)
z2=sigmoid(a2) #将加权和a2通过**函数sigmoid转换,得到隐藏层2的输出信号数组z2
a3=np.dot(z2,W3)+b3 #计算加权和a3(即信号数组z2与输出层权重矩阵W3相乘,再加上输出层偏置矩阵b3)
y=identity_function(a3) #将加权和a3通过输出层**函数identity_function转换,得到输出层的输出信号数组y
return y #返回三层神经网络的输出信号数组y
# 测试
network=init_network() #初始化字典变量
x=np.array([1.0,0.5]) #定义输入信号数组
y=predict(network,x) #通过三层神经网络的推理函数计算输出信号
print(y) #打印输出信号数组
对应测试结果:
本例输出层**函数用的是恒等函数,对应回归问题。对于输入数据1.0的预测值是0.3168,对于输入数据0.5的预测值是0.6963。
本博客参考了《深度学习入门——基于Python的理论与实现》(斋藤康毅著,陆宇杰译),特在此声明。