欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

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

 

相关标签: python与深度学习