python实现一个简单三层神经网络的搭建(有代码)
废话不多说了,直接步入正题,一个完整的神经网络一般由三层构成:输入层,隐藏层(可以有多层)和输出层。本文所构建的神经网络隐藏层只有一层。一个神经网络主要由三部分构成(代码结构上):初始化,训练,和预测。首先我们先来初始化这个神经网络吧!
1.初始化
- 我们所要初始化的内容包括:神经网络每层上的神经元个数(这个是根据实际问题输入输出而得到的,我们将它设置为一个可自定义量)。
- 不同层间数据互相传送的权重值。
- 激活函数(模拟自然界的神经元,刺激信号需要达到一定的程度才能激活神经元)
下面上代码:
def __init__(self, input_nodes_num, hidden_nodes_num, output_nodes_num, lr):
# 初始化神经元个数,可以直接修改
self.input_nodes = input_nodes_num
self.hidden_nodes = hidden_nodes_num
self.output_nodes = output_nodes_num
self.learning_rate = lr
# 初始化权重值,利用正态分布函数进行随机初始化,均值为0,方差为神经元个数开方
self.w_input_hidden = numpy.random.normal(0.0, pow(self.hidden_nodes, -0.5),
(self.hidden_nodes, self.input_nodes))
self.w_hidden_output = numpy.random.normal(0.0, pow(self.output_nodes, -0.5),
(self.output_nodes, self.hidden_nodes))
# 初始化激活函数,激活函数选用Sigmoid函数,更加平滑,接近自然界的神经元行为模式
# lambda定义了一个匿名函数
self.activation_function = lambda x: scipy.special.expit(x)
pass
下面我们来解释一下上述代码段中的一些编程知识。首先是__init__()它是一个类的构造函数,在构建一个类的对象时会调用此函数,所以我们将神经网络初始化相关代码放到这个函数里。
self.w_input_hidden = numpy.random.normal(0.0, pow(self.hidden_nodes, -0.5),
(self.hidden_nodes, self.input_nodes))
这句代码使用