《python神经网络编程》,3层神经网络的构建
2020-03-05 20:33
656 查看
import numpy as np import scipy.special as sps # 定义神经网络的类 class neuralnetwork: #初始化函数 def __init__(self,input_nodes, hidden_nodes, output_nodes, learning_rate): self.inodes = input_nodes self.hnodes = hidden_nodes self.onodes = output_nodes self.lr = learing_rate # 初始化权重 self.wih = np.random.normal(0.0, pow(hidden_nodes,-0.5),(hidden_nodes, input_nodes)) #使用正态分布函数把权重初始化为均值为0,标准差为后一层个数的-0.5次方 self.who = np.random.normal(0.0, pow(output_nodes,-0.5),(output_nodes, hidden_nodes)) # 初始化激活函数 self.act_function = lambda x: sps.explit(x) pass # 训练函数 def train(self, input_list, target_list): inputs = np.array(input_list, ndmin=2).T targets = np.array(target_list, ndmin=2).T ## 前向传播 ## hidden_inputs = np.dot(self.wih, inputs) hidden_outputs = self.act_function(hidden_inputs) final_inputs = np.dot(self.who, hidden_outputs) final_outputs = self.act_function(final_inputs) ## 误差反向传播 ## # 输出层误差 error_outlayer = targets - final_outputs # 隐藏层误差 error_hiddenlayer = np.dot(self.who.T, error_outlayer) # 更新权重 self.who += self.lr*np.dot((error_finallayer*final_outputs*(1-final_outputs)),hidden_outputs) self.wih += self.lr*np.dot((error_hiddenlayer*hidden_outputs*(1-hidden_outputs)),inputs) pass # 定义输出函数 def query(self, input_list): inputs = np.array(input_list, ndmin=2).T hidden_inputs = np.dot(self.wih, inputs) hidden_outputs = self.act_function(hidden_inputs) final_inputs = np.dot(self.who, hidden_outputs) final_outputs = self.act_function(final_inputs) return final_outputs pass ########### 主函数 ######### input_nodes = 784 hidden_nodes = 200 output_nodes = 10 lr = 0.1 n = neuralnetwork(input_nodes,hidden_nodes,output_nodes,lr) ## 训练数据 # 载入dataset文件下名称为mnist.csv的文本 train_file = open('dataset/mnist_train.csv', 'r') train_list = train_file.readlines() train_file.close() # 读取完文件要记得关闭文件哦,不然会占内存,也可能会出现数据错乱 for record in train_list: all_value = record.split(',')# 每读取一个数据用逗号分隔 # 把输入数据范围缩到0.01--1,便于处理 inputs = np.asfarry(all_value[1:])/255.0*0.99+0.01 # 生成训练标签(正确值) targets = np.zeros(output_nodes) + 0.01 n.train(inputs, targets) pass ## 测试数据 scores = [] test_file = open('dataset/mnist_test.csv', 'r') test_list = test_file.readlines() test_file.close() for record in test_list: all_value = record.split(',')# 每读取一个数据用逗号分隔 # 把文本格式转换为整数,这一步很重要哦! correct_label = int(all_value[0]) # 把输入数据范围缩到0.01--1,便于处理 inputs = np.asfarry(all_value[1:])/255.0*0.99+0.01 # 输出结果 result = n.query(inputs) pre_label = np.argmax(resul) # pre_label为result数组最大的标签0-9中间一个 if (pre == correct_label): scores.append(1) else: scores.append(0) pass ## 计算得分 score = np.asarray(scores) print('The neuralnetwork prediction scor is: {}'.format(score.sum()/score.size))
直接copy上面代码去执行可能有些缩进到问题,自己动手微调一下或者自己码一下,问题不大。
要数据集的留言留下邮箱。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- tensorflow框架下构建3层神经网络
- 神经网络学习小记录2——利用tensorflow构建循环神经网络(RNN)
- python构建深层神经网络
- 理解神经网络,从简单的例子开始(1)7行python代码构建神经网络
- TensorFlow学习笔记(一):构建神经网络
- 一步一步学用Tensorflow构建卷积神经网络
- PyTorch笔记4-快速构建神经网络(NN)
- TensorFlow下构建高性能神经网络模型的最佳实践
- TensorFlow下构建高性能神经网络模型的最佳实践
- Tensorflow基础知识与神经网络构建--step by step 入门TensorFlow(一)
- NG 神经网络 构建网络基础
- 实现一个simple 3层的神经网络
- tensorflow1.1/构建双向神经网络识别mnist
- tensorflow5 简单神经网络的构建
- 人工神经网络工具NeuroSolutions使用教程:NeuralExpert构建神经网络
- 基于PyTorch的深度学习入门教程(四)——构建神经网络
- 使用Keras构建神经网络进行Mnist手写字体分类
- 用TensorFlow构建基础的神经网络(一):MLP
- TFLearn构建神经网络
- 在tensorflow下构建二层神经网络和三层神经网络解决10分类任务对比