最近在看《python神经网络编程》这本书,个人感觉这本书非常适合想要学习神经网络的小白们,书很薄,200多页,从最基础的知识开始讲起,循序渐进,通俗易通,是一本很好的神经网络入门书籍。
第一章是基础知识,建议认真阅读,这部分就不写了,我打算从第二章开始更新。
我用的是Ubuntu20.4+jupyter notebook。具体环境搭建可以参考我前面的两篇
我们从最简单的开始,小步前进,逐步建立Python程序。
1、框架代码
神经网络至少包含下面三个函数:
初始化函数——设定输入层节点、隐藏层节点和输出层节点的数量。
训练——学习给定训练集样本后,优化权重。
查询——给定输入,从输出节点给出答案。
具体可能还需要更多函数,但是我们先从这三个函数起步。
下面是基础的代码框架:
#神经网络类型定义
class neuralNetwork:
#初始化
def __init__(self):
pass
#训练
def train():
pass
#查询
def query():
pass
2、初始化网络
从初始化开始,我们能想到的参数有输入层节点、隐藏层节点和输出层节点的数量,还包括学习率。这些节点数量定义了神经网络的形状和尺寸。我们不会将这 些数量固定,而是当我们使用参数创建一个新的神经网络对象时,才会确定这些数量。通过这种方式,我们保留了选择的余地,轻松地创建不同大小的新神经网络。
现在我们来更新__init__函数:
#神经网络类型定义
class neuralNetwork:
#初始化
def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate):
self.inodes=inputnodes
self.hnodes=hiddennodes
self.onodes=outputnodes
self.lr=learningrate
pass
#训练
def train():
pass
#查询
def query():
pass
3、权重——网络的核心
这一步是创建网络的节点和链接。网络中最重要的部分是链接权重, 我们使用这些权重来计算前馈信号、反向传播误差,并且在试图改进网络 时优化链接权重本身。
使用矩阵可以简明地表示权重。因此,我们可以创 建:
在输入层与隐藏层之间的链接权重矩阵: W i n p u t _ h i d d e n = h i d d e n _ n o d e s ∗ i n p u t _ n o d e s W_{input\_hidden}=hidden\_ nodes*input\_nodes Winput_hidden=hidden_nodes∗input_nodes
在隐藏层和输出层之间的链接权重矩阵:
W o u t p u t _ h i d d e n = h i d d e n _ n o d e