三层神经网络的推理过程实现(前向处理)

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-27 18:52:56

# 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的理论与实现》(斋藤康毅著,陆宇杰译),特在此声明。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!