人工智能入门第一本书:《python神经网络编程》神经网络标准入门代码模板
一、基础知识提要:

解释:
(1)X指代输入层或隐藏层与对应层之间的权重W与其输入数据做向量和的结果;W指代该层级的权重;下标中h,o指的是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
浙公网安备 33010602011771号