人工智能入门第一本书:《python神经网络编程》神经网络标准入门代码模板

一、基础知识提要:

 

解释:

(1)X指代输入层或隐藏层与对应层之间的权重W与其输入数据做向量和的结果;W指代该层级的权重;下标中ho指的是hidden层和output层对应的数据

(2)第三个公式是权重更新公式,α表示学习率(决定更新的幅度大小),Ek指该层(k层)的方向传播错误,Ok也是表示第k层输出,上标T表示矩阵转置。

感兴趣的同学可去查找权重更新公式的推导过程(在书本P72-76(顺便指出P117的本公式有错误,P76页为正确的))

二、神经网络模型及数据:

1)本次使用的为最简单的三层神经网络模型包含一个输入层、隐藏层、输出层:

 

(2)数据:虽然本次代码搭建的为神经网络的框架,不需要对数据进行操作,但是需要说明的是数据都是矩阵形式的,需要注意代码中转置的地方。

三:代码及其注释

 1 import numpy
 2 import scipy.special
 3 
 4 class neuralNetwork :
 5     #初始化神经网络
 6     def _init_(self, inputnodes, hiddennodes, outputnodes, learningrate) :
 7         #传入参数输入层,隐藏层及输出层的结点数
 8         self.inodes = inputnodes
 9         self.hnodes = hiddennodes
10         self.onodes = outputnodes
11         #初始化神经网络中的权重矩阵
12         self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5),(self.hnodes, self.inodes))
13         self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5),(self.onodes, self.hnodes))
14         #初始化神经网络的学习率
15         self.lr = learningrate
16         #S函数
17         self.activation_function = lambda x: scipy.special.expit(x)
18 
19         pass
20 
21 
22     #训练神经网络
23     def train(self, input_list, targets_list) :
24         #将输入及目标输出转化为二维numpy数组
25         inputs = numpy.array(input_list, ndmin=2).T
26         targets = numpy.array(targets_list, ndmin=2).T
27         #计算隐藏层输出,后者为前者输出后进行sigmoid函数计算后的结果
28         hidden_inputs = numpy.dot(self.wih, inputs)
29         hidden_outputs = self.activation_function(hidden_inputs)
30         #计算输出层输出
31         final_inputs = numpy.dot(self.who, hidden_outputs)
32         final_outputs = self.activation_function(final_inputs)
33         #计算输出层输出
34         output_errors = targets - final_outputs
35         #计算隐藏层输出
36         hidden_errors = numpy.dot(self.who.T, output_errors)
37         #更新权重
38         self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)), numpy.transpose(hidden_outputs))
39         self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), numpy.transpose(inputs))
40 
41         pass
42 
43     #查询神经网络
44     def query(self, inputs_list) :
45         inputs = numpy.array(inputs_list, ndmin=2).T
46 
47         hidden_inputs = numpy.dot(self.wih, inputs)
48         hidden_outputs = self.activation_function(hidden_inputs)
49 
50         final_inputs = numpy.dot(self.who, hidden_outputs)
51         final_outputs = self.activation_function(final_inputs)
52 
53         return final_outputs

 

posted @ 2020-09-30 14:25  Relissc  阅读(276)  评论(0)    收藏  举报