神经网络的训练和测试 python
承接上一节,神经网络需要训练,那么训练集来自哪?测试的数据又来自哪?
《python神经网络编程》一书给出了训练集,识别图片中的数字。测试集的链接如下:
https://raw.githubusercontent.com/makeyourownneuralnetwork/makeyourownneuralnetwork/master/mnist_dataset/mnist_test_10.csv
为了方便,这只是一个小的测试集,才10个。
训练集链接:https://raw.githubusercontent.com/makeyourownneuralnetwork/makeyourownneuralnetwork/master/mnist_dataset/mnist_train_100.csv
这是包含100个数据的训练集。
训练集和测试集的每段的第一个字母是期望的数字,每段剩余的文本是表示这个数字的像素集合,为784个数据。为了计算,我们要把文本转化为数字进行存放。把第一个数据当作期望数据,剩余的784个数据当作输入。因此输入节点设为784个。输出节点设为10个,因为要识别的是10个数据0到9。隐藏层节点选为100个,并没有进行科学的计算。
import numpy
import scipy.special
import matplotlib.pyplot as plt
import pylab
# 神经网络类定义
class NeuralNetwork():
# 初始化神经网络
def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
# 设置输入层节点,隐藏层节点和输出层节点的数量
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
# 学习率设置
self.lr = learningrate
# 权重矩阵设置 正态分布
self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes))
self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))
# 激活函数设置,sigmod()函数
self.activation_function = lambda x: scipy.special.expit(x)
pass # 训练神经网络
def train(self,input_list,target_list):
# 转换输入输出列表到二维数组
inputs = numpy.array(input_list, ndmin=2).T
targets = numpy.array(target_list,ndmin= 2).T
# 计算到隐藏层的信号
hidden_inputs = numpy.dot(self.wih, inputs)
# 计算隐藏层输出的信号
hidden_outputs = self.activation_function(hidden_inputs)
# 计算到输出层的信号
final_inputs = numpy.dot(self.who, hidden_outputs)
final_outputs = self.activation_function(final_inputs) output_errors = targets - final_outputs
hidden_errors = numpy.dot(self.who.T,output_errors) #隐藏层和输出层权重更新
self.who += self.lr * numpy.dot((output_errors*final_outputs*(1.0-final_outputs)),
numpy.transpose(hidden_outputs))
#输入层和隐藏层权重更新
self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)),
numpy.transpose(inputs))
pass
# 查询神经网络
def query(self, input_list):
# 转换输入列表到二维数组
inputs = numpy.array(input_list, ndmin=2).T
# 计算到隐藏层的信号
hidden_inputs = numpy.dot(self.wih, inputs)
# 计算隐藏层输出的信号
hidden_outputs = self.activation_function(hidden_inputs)
# 计算到输出层的信号
final_inputs = numpy.dot(self.who, hidden_outputs)
final_outputs = self.activation_function(final_inputs) return final_outputs # 设置每层节点个数
input_nodes = 784
hidden_nodes = 100
output_nodes = 10
# 设置学习率为0.3
learning_rate = 0.3
# 创建神经网络
n = NeuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate) #读取训练数据集 转化为列表
training_data_file = open("D:/mnist_train_100.csv",'r')
training_data_list = training_data_file.readlines();
training_data_file.close() #训练神经网络
for record in training_data_list:
#根据逗号,将文本数据进行拆分
all_values = record.split(',')
#将文本字符串转化为实数,并创建这些数字的数组。
inputs = (numpy.asfarray(all_values[1:])/255.0 * 0.99) + 0.01
#创建用零填充的数组,数组的长度为output_nodes,加0.01解决了0输入造成的问题
targets = numpy.zeros(output_nodes) + 0.01
#使用目标标签,将正确元素设置为0.99
targets[int(all_values[0])] = 0.99
n.train(inputs,targets)
pass #读取测试文件
test_data_file = open("D:/mnist_test_10.csv",'r')
test_data_list = test_data_file.readlines()
test_data_file.close() all_values = test_data_list[0].split(',')
print(all_values[0]) #输出目标值 image_array = numpy.asfarray(all_values[1:]).reshape((28,28))
print(n.query((numpy.asfarray(all_values[1:])/255.0*0.99)+0.01))#输出标签值
plt.imshow(image_array,cmap='Greys',interpolation='None')#显示原图像
pylab.show()
输出情况:


从结果可以看出,我们输入的目标值为7,结果中第7个标签所对应的值最大,表明了正确识别了目标值。和图片中的值一样。
神经网络的训练和测试 python的更多相关文章
- ensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试
http://www.cnblogs.com/denny402/p/5852983.html ensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试 刚开始学习tf时,我们从 ...
- tensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试
刚开始学习tf时,我们从简单的地方开始.卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始. 神经网络没有卷积功能,只有简单的三层:输入层,隐藏层和输 ...
- Python实现一个简单三层神经网络的搭建并测试
python实现一个简单三层神经网络的搭建(有代码) 废话不多说了,直接步入正题,一个完整的神经网络一般由三层构成:输入层,隐藏层(可以有多层)和输出层.本文所构建的神经网络隐藏层只有一层.一个神经网 ...
- 机器学习基础:(Python)训练集测试集分割与交叉验证
在上一篇关于Python中的线性回归的文章之后,我想再写一篇关于训练测试分割和交叉验证的文章.在数据科学和数据分析领域中,这两个概念经常被用作防止或最小化过度拟合的工具.我会解释当使用统计模型时,通常 ...
- 《TensorFlow实战》中AlexNet卷积神经网络的训练中
TensorFlow实战中AlexNet卷积神经网络的训练 01 出错 TypeError: as_default() missing 1 required positional argument: ...
- Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)
基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html 摘要 在前面的博文中,我详细介绍了Caf ...
- Caffe初试(二)windows下的cafee训练和测试mnist数据集
一.mnist数据集 mnist是一个手写数字数据库,由Google实验室的Corinna Cortes和纽约大学柯朗研究院的Yann LeCun等人建立,它有60000个训练样本集和10000个测试 ...
- Caffe上用SSD训练和测试自己的数据
学习caffe第一天,用SSD上上手. 我的根目录$caffe_root为/home/gpu/ljy/caffe 一.运行SSD示例代码 1.到https://github.com ...
- 物体检测算法 SSD 的训练和测试
物体检测算法 SSD 的训练和测试 GitHub:https://github.com/stoneyang/caffe_ssd Paper: https://arxiv.org/abs/1512.02 ...
随机推荐
- 学习Geodatabase的总结
一.怎样择取自己需要的.有用的资料 1.开始找资料时,首先想到的是ESRI的帮助文档,因为它直接.规范而系统.通读一遍之后,大致了解了Geodatabase的各个方面.再从帮助文档体系结构中选出重要的 ...
- Eclipse 如何修改 Web 项目的名称
Eclipse 切换到 Navigator 视图,能显现出项目下所有的文件便于修改. 1.修改该项目目录下:.project文件 <projectDescription><name ...
- --disable-column-names,--skip-column-names,--column-names=0
--disable-column-names,--skip-column-names,--column-names=0
- django orm 多对多自定义第三张表
# -*- coding: utf-8 -*-# Generated by Django 1.11.11 on 2018-09-02 08:07from __future__ import unico ...
- 压力测试工具ab的使用
ab是Apache自带的HTTP压力测试工具,全称是ApacheBench 路径为\Apache\bin\ab.exe 参数文档: http://httpd.apache.org/docs/2.2/p ...
- org.springframework.beans.MethodInvocationException: Property 'cacheManager' threw exception; nested exception is org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: Caches cannot be
shiro cache manage配置报错: org.springframework.beans.MethodInvocationException: Property 'cacheManager' ...
- MySQL入门很简单: 10 mysql运算符
1. 算术运算符 例子: 将t1表中字段a的值进行加法,减法和乘法 2. 比较运算符 注:LIKE经常和通配符"_"和"%"一起使用,"_" ...
- java集合框架——Set
一.Set概述 Set集合的特点是元素不允许重复,而且是无序的(添加和取出的顺序不一致). Set接口中的方法和Collection接口中的方法几乎相同,略. Set接口下常用的两个类:HashSet ...
- *389. Find the Difference (string + map(26)) read problems carefully
Given two strings s and t which consist of only lowercase letters. String t is generated by random s ...
- NO.003-2018.02.08《江城子·乙卯正月二十日夜记梦》宋代:苏轼
江城子·乙卯正月二十日夜记梦_古诗文网 江城子·乙卯正月二十日夜记梦 乙卯:公元1075年,即北宋熙宁八年. 宋代:苏轼 十年生死两茫茫,不思量,自难忘.千里孤坟,无处话凄凉.纵使相逢应不识,尘满面, ...