Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >代码实现三层神经网络的手写字训练及测试

代码实现三层神经网络的手写字训练及测试

原创
作者头像
opprash
修改于 2019-09-18 10:38:01
修改于 2019-09-18 10:38:01
71300
代码可运行
举报
运行总次数:0
代码可运行

本篇使用的原理和计算公式是来自于上一篇:神经元矩阵计算示例

废话不说直接上代码:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import numpy
import scipy.special
import matplotlib.pyplot
class network:
    def __init__(self , inputnodes, hiddennodes, outputnodes,learningrate ):
        self.inputnodes=inputnodes
        self.hiddennodes=hiddennodes
        self.outputnodes=outputnodes
        self.lr=learningrate
        # 计算输入层隐藏层的权重系数
        self.wih = numpy.random.normal(0.0, pow(self.hiddennodes, -0.5),(self.hiddennodes, self.inputnodes))
        # 计算隐藏层输出层的权重系数
        self.who = numpy.random.normal(0.0, pow(self.outputnodes, -0.5),(self.outputnodes, self.hiddennodes))
        # 定义激活函数,使用scipy中的expit函数
        self.activation_function = lambda x:scipy.special.expit(x)
    # 训练神经网络
    def train(self, inputs_list, targets_list):
        # 将输入转化为2维矩阵
        inputs = numpy.array(inputs_list, ndmin=2).T
        targets = numpy.array(targets_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
            # query the neural network
    def query(self,inputs_list):
        # 将输入转化为二维矩阵
        inputs = numpy.array(inputs_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
        pass

#加载数据进行训练
def train_datas(output_nodes,network):
    with open('/home/opprash/Desktop/mnist_train_100.csv', 'r') as f:
        data_list = f.readlines()
        f.close()
    #可视化csv中的数字的意义
    # all_values = data_list[1].split(',')
    # image_array = numpy.asfarray(all_values[1:]).reshape((28, 28))
    # matplotlib.pyplot.imshow(image_array, cmap='Greys', interpolation='None')
    # matplotlib.pyplot.show()
    # scaled_input = (numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01
    # print(scaled_input)

    # 训练神经网络
    # 遍历训练集的所有数据
    for record in data_list:
        # 以逗号分割
        all_values = record.split(',')
        # 将数据压缩到0到1之间,原始数据是在0-255之间
        inputs = (numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01
        # 创建目标输出值(全部0.01,除了所需的值标签是0.99)
        targets = numpy.zeros(output_nodes) + 0.01
        # all_values[0] 是此记录的目标标签
        targets[int(all_values[0])] = 0.99
        network.train(inputs, targets)
        pass

#加载数据进行测试
def test_data(network):
    with open('/home/opprash/Desktop/mnist_test_10.csv', 'r') as f:
        data_list = f.readlines()
        f.close()
    scorecard = []
    for record in data_list:
        # 以逗号分割
        all_values = record.split(',')
        # 正确答案是第一个值
        correct_label = int(all_values[0])
        print( "真实的标签",correct_label)
        # 将数据压缩到0到1之间,原始数据是在0-255之间
        inputs = (numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01
        # 使用网络进行查询
        outputs = network.query(inputs)
        # 最高值的索引就是对应的标签
        label = numpy.argmax(outputs)
        print("神经网络预测的答案:",label)
        # 追加正确或者不正确的list
        if (label == correct_label):
        # 网络的答案匹配正确的答案,添加1
            scorecard.append(1)
        else:
        # 网络的答案匹配不正确的答案,添加0
            scorecard.append(0)
        scorecard_array = numpy.asarray(scorecard)
    print("准确率 = ", scorecard_array.sum()/scorecard_array.size)

if __name__ == '__main__':
    # 定义输入,隐藏层,输出层节点个数
    input_nodes = 784
    hidden_nodes = 100
    output_nodes = 10
    # 学习率 0.3
    learning_rate = 0.3
    # 实例化神经网络
    n = network(input_nodes,hidden_nodes,output_nodes,learning_rate)
    train_datas(output_nodes,n)
    test_data(n)

运行结果:

运行结果
运行结果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
【神经网络】:手写数字识别,一文带你掌握!
我们的要做的是,训练出一个人工神经网络(ANN),使它能够识别手写数字(如下图所示)。
WEBJ2EE
2023/09/02
3.4K0
【神经网络】:手写数字识别,一文带你掌握!
人工神经网络学习笔记(4)
前面的几篇文章我们熟悉了人工神经网络的数学原理及其推导过程,但有道是‘纸上得来终觉浅’,是时候将理论变为现实了。现在我们将应用Python语言以及其强大的扩充程序库Numpy来编写一个简单的神经网络。
twelvecoder
2021/12/22
3870
人工神经网络学习笔记(4)
神经网络的简单例子
上次说了梯度下降用于简单的线性回归问题,这次将梯度下降用于较复杂一点的神经网络结构。
_咯噔_
2020/04/22
1.3K0
用python实现数字图片识别神经网络--实现网络训练功能
上节我们完成了神经网络基本框架的搭建,当时剩下了最重要的一个接口train,也就是通过读取数据自我学习,进而改进网络识别效率的功能尚未实现,从本节开始,我们着手实现该功能。 自我训练过程分两步走,第一步是计算输入训练数据,给出网络的计算结果,这点跟我们前面实现的query()功能很像。第二步是将计算结果与正确结果相比对,获取误差,采购采用我们前面描述的误差反向传播法更新网络里的每条链路权重。 我们先用代码完成第一步,代码如下: def train(self, inputs_list, targets_li
望月从良
2018/07/19
1.1K0
深度学习:透过神经网络的内在灵活与柏拉图的哲学理念
以神经网络为基础的深度学习,它最大的作用就是让计算机能求解那些没有明确规则或定义的问题,例如你根本无法制定出一系列明确的规则或步骤去让计算机识别一幅图像中的内容是什么,人工智能最大的强项就是让计算机能处理那些模糊不清,几乎无法用明确的规则或步骤来描述的问题。 一个受过大量数据训练的神经网络,给定领域内的图像表示什么内容,此时它就像一个黑盒子,把数据从一端输入,然后结果自动从另一端输出,你根本不知道他内部的运行机制。如果我们只在乎得到正确的结果,那么无论神经网络的内部机理如何复杂,我们都无需关心。如果我们想知
望月从良
2018/07/19
5840
如何构建一个简单的神经网络如何构建一个简单的神经网络
最近报名了Udacity的深度学习基石,这是介绍了第二部分神经网络入门,第一篇是线性回归背后的数学. 本文notebook的地址是:https://github.com/zhuanxuhit/nd101/blob/master/1.Intro_to_Deep_Learning/2.How_to_Make_a_Neural_Network/python-network.ipynb
zhuanxu
2018/08/23
7810
如何构建一个简单的神经网络如何构建一个简单的神经网络
一文学会用 Tensorflow 搭建神经网络
---- cs224d-Day 6: 快速入门 Tensorflow 本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的, 讲的很好,浅显易懂,入门首选, 而且在github有代码, 想看视频的也可以去他的优酷里的频道找。 Tensorflow 官网 ---- 神经网络是一种数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,在外界信息的基础上,改变内部的结构,常用来对输入和输出间复杂的关系进行建模。 神经网络由大量的节点和之间的联系构成,负责传递信息和加工信息,神经元也
杨熹
2018/04/02
1.1K0
一文学会用 Tensorflow 搭建神经网络
小白都能看懂的神经网络教程:从原理到优化如此简单
一位来自普林斯顿的华人小哥Victor Zhou,写了篇神经网络入门教程,在线代码网站Repl.it联合创始人Amjad Masad看完以后,给予如是评价。
量子位
2019/04/23
2.3K1
小白都能看懂的神经网络教程:从原理到优化如此简单
启动网络的自我训练流程,展示网络数字图片识别效果
上一节,我们完成了网络训练代码的实现,还有一些问题需要做进一步的确认。网络的最终目标是,输入一张手写数字图片后,网络输出该图片对应的数字。由于网络需要从0到9一共十个数字中挑选出一个,于是我们的网络最
望月从良
2018/07/19
8720
[Python人工智能] 二.theano实现回归神经网络分析
从本篇文章开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。第一篇文章主要讲解神经网络基础概念,同时讲解Theano库的安装过程及基础用法,主要结合 "莫烦大神" 的视频介绍,后面随着深入会讲解具体的项目及应用。基础性文章,希望对您有所帮助,也建议大家一步步跟着学习,同时文章中存在错误或不足之处,还请海涵~
统计学家
2019/04/10
4750
[Python人工智能] 二.theano实现回归神经网络分析
用Python从零开始设计数字图片识别神经网络--搭建基本架构
从本节开始,我们用python把前几节讲解的神经网络原理实现出来。在最开始时,我们直接调用Kera框架,快速的构建一个能识别数字图片的神经网络,从本节开始,我们自己用代码将整个神经网络重新实现一遍,只有我们能重新制造一个“轮胎”,我们才能说我们真正理解的“轮胎”的内在原理。 我们代码开发也保持着由简单到复杂的原则,就像上楼梯,一步一步的走,直到最后走到“高处不胜寒”的楼顶。一开始,我们先把神经网络的基本架构给搭建出来。我们的代码要导出三个接口,分别完成以下功能: 1,初始化initialisation,设置
望月从良
2018/07/19
7150
Keras 从零开始构建深度神经网络
Keras 是一个用于定义和训练神经网络的高阶API。简单的说,Keras 是对 TensorFlow 等深度学习框架的更高一层的封装,以提供更加优雅,用户友好的接口设计。因此,Keras 不能独立运行,需要底层框架的支持,这个底层框架可以是 TensorFlow, CNTK, Theano。推荐使用 TensorFlow , 本文也是以 TensorFlow 为例。
我是一条小青蛇
2019/10/23
1K0
Keras 从零开始构建深度神经网络
神经网络算法(Nerual Networks)
输入层(input layer), 隐藏层 (hidden layers), 输入层 (output layers)
foochane
2019/05/23
1K0
神经网络算法(Nerual Networks)
使用python创建自己的第一个神经网络模型吧!
神经网络(NN),也被称为人工神经网络(ANN),是机器学习领域中学习算法的子集,大体上借鉴了生物神经网络的概念。目前,神经网络在计算机视觉、自然语言处理等领域应用广泛。德国资深机器学习专家Andrey Bulezyuk说到,“神经网络正在彻底改变机器学习,因为它们能够有效地模拟各种学科和行业的复杂抽象,且无需太多人工参与。” 大体上,人工神经网络基本包含以下组件:
用户3578099
2019/08/15
1.4K0
一小时培训之神经网络入门
系列培训目录 ➡️神经网络(Neural Networks)⬅️ 卷积神经网络(Convolutional Neural Networks) 循环神经网络(Recurrent Neural Netwo
linxinzhe
2018/04/10
9250
一小时培训之神经网络入门
使用递归神经网络-长短期记忆(RNN-LSTM)预测比特币和以太币价格
2017年对人工智能和加密货币来说是重要的一年, 我们见证了许多新的研究进展和突破。毋庸置疑,人工智能是当今甚至今后很长一段时间内最令人瞩目的技术之一。 而加密货币在这一年中的热度之高是我所没有预料到的,这是加密货币的一波大牛市,投资加密货币(例如,如比特币,以太币,莱特币,瑞波币等)的资回报率几近疯狂。
用户3578099
2019/08/16
1.4K0
神经网络学习笔记1——BP神经网络原理到编程实现(matlab,python)[通俗易懂]
不好意思拖了这么久才整理,弄完考试的事情就在研究老师给安排的新任务,一时间还有点摸不到头脑,就直接把百度网盘链接放在视频下面了但是最近才发现那个链接发出来了看不到,所以现在有时间了就来重新整理一下!
全栈程序员站长
2022/09/09
1.4K0
神经网络学习笔记1——BP神经网络原理到编程实现(matlab,python)[通俗易懂]
【深度学习实验】前馈神经网络(final):自定义鸢尾花分类前馈神经网络模型并进行训练及评价
鸢尾花分类(通过输入鸢尾花的特征信息,预测鸢尾花的种类)是一个常见的机器学习问题。本次实验旨在使用PyTorch构建一个简单的鸢尾花分类前馈神经网络模型,并进行训练和评价,以了解PyTorch的基本使用方法和模型训练过程。
Qomolangma
2024/07/30
2860
【深度学习实验】前馈神经网络(final):自定义鸢尾花分类前馈神经网络模型并进行训练及评价
优达学城深度学习之五——卷积神经网络代码实现及实战演练
梯度下降算法推导与实现 import matplotlib.pyplot as plt import numpy as np import pandas as pd #Some helper functions for plotting and drawing lines def plot_points(X, y): admitted = X[np.argwhere(y==1)] rejected = X[np.argwhere(y==0)] plt.scatter([s
墨明棋妙27
2022/08/24
1920
优达学城深度学习之五——卷积神经网络代码实现及实战演练
使用Keras构建具有自定义结构和层次图卷积神经网络(GCNN)
如何构建具有自定义结构和层次的神经网络:Keras中的图卷积神经网络(GCNN) 在生活中的某个时刻我们会发现,在Tensorflow Keras中预先定义的层已经不够了!我们想要更多的层!我们想要建
deephub
2020/07/29
2.1K0
使用Keras构建具有自定义结构和层次图卷积神经网络(GCNN)
推荐阅读
相关推荐
【神经网络】:手写数字识别,一文带你掌握!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验