iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >单层的基础神经网络基于TensorFlow如何实现手写字识别
  • 272
分享到

单层的基础神经网络基于TensorFlow如何实现手写字识别

2023-06-17 03:06:00 272人浏览 薄情痞子
摘要

本篇文章为大家展示了单层的基础神经网络基于Tensorflow如何实现手写字识别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。先上代码import tensorflow &nbs

本篇文章为大家展示了单层的基础神经网络基于Tensorflow如何实现手写字识别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

先上代码

import tensorflow  from tensorflow.examples.tutorials.mnist import input_data  import matplotlib.pyplot as plt    # 普通的神经网络学习  # 学习训练类  class NORMal:        weight = []      biases = []        def __init__(self):          self.times = 1000          self.mnist = []          self.session = tensorflow.Session()          self.xs = tensorflow.placeholder(tensorflow.float32, [None, 784])          self.ys = tensorflow.placeholder(tensorflow.float32, [None, 10])          self.save_path = 'learn/result/normal.ckpt'        def run(self):          self.import_data()          self.train()          self.save()        def _setWeight(self,weight):          self.weight = weight        def _setBiases(self,biases):          self.biases = biases        def _getWeight(self):          return self.weight        def _getBiases(self):          return self.biases      # 训练      def train(self):            prediction = self.add_layer(self.xs, 784, 10, activation_function=tensorflow.nn.softmax)            cross_entropy = tensorflow.reduce_mean(              -tensorflow.reduce_sum(                  self.ys * tensorflow.log(prediction)                  , reduction_indices=[1])          )          train_step = tensorflow.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)            self.session.run(tensorflow.global_variables_initializer())            for i in range(self.times):              batch_xs, batch_ys = self.mnist.train.next_batch(100)              self.session.run(train_step, feed_dict={self.xs: batch_xs, self.ys: batch_ys})              if i % 50 == 0:                  # images 变换为 labels,images相当于x,labels相当于y                  accurary = self.computer_accurary(                      self.mnist.test.images,                      self.mnist.test.labels,                      prediction                  )        # 数据导入      def import_data(self):          self.mnist = input_data.read_data_sets('MNIST_data', one_hot=True)        # 数据保存      def save(self):          saver = tensorflow.train.Saver()          path = saver.save(self.session,self.save_path)        # 添加隐藏层      def add_layer(self,inputs,input_size,output_size,activation_function=None):            weight = tensorflow.Variable(tensorflow.random_normal([input_size,output_size]),dtype=tensorflow.float32,name='weight')            biases = tensorflow.Variable(tensorflow.zeros([1,output_size]) + 0.1,dtype=tensorflow.float32,name='biases')          Wx_plus_b = tensorflow.matmul(inputs,weight) + biases            self._setBiases(biases)          self._setWeight(weight)            if activation_function is None:              outputs = Wx_plus_b          else:              outputs = activation_function(Wx_plus_b,)            return outputs          # 计算结果数据与实际数据的正确率      def computer_accurary(self,x_data,y_data,tf_prediction):            prediction = self.session.run(tf_prediction,feed_dict={self.xs:x_data,self.ys:y_data})            # 返回两个矩阵中***值的索引号位置,然后进行相应位置的值大小比较并在此位置设置为True/False          correct_predition = tensorflow.equal(tensorflow.argmax(prediction,1),tensorflow.argmax(y_data,1))            # 进行数据格式转换,然后进行降维求平均值          accurary = tensorflow.reduce_mean(tensorflow.cast(correct_predition,tensorflow.float32))            result = self.session.run(accurary,feed_dict={self.xs:x_data,self.ys:y_data})            return result    # 识别类  class NormalRead(Normal):        input_size = 784      output_size = 10        def run(self):          self.import_data()          self.getSaver()          origin_input = self._getInput()          output = self.recognize(origin_input)            self._showImage(origin_input)          self._showOutput(output)          pass        # 显示识别结果      def _showOutput(self,output):          number = output.index(1)          print('识别到的数字:',number)        # 显示被识别图片      def _showImage(self,origin_input):          data = []          tmp = []          i = 1          # 原数据转换为可显示的矩阵          for v in origin_input[0]:              if i %28 == 0:                  tmp.append(v)                  data.append(tmp)                  tmp = []              else:                  tmp.append(v)              i += 1            plt.figure()          plt.imshow(data, cmap='binary')  # 黑白显示          plt.show()          def _setBiases(self,biases):          self.biases = biases          pass        def _setWeight(self,weight):          self.weight = weight          pass        def _getBiases(self):          return self.biases        def _getWeight(self):          return self.weight        # 获取训练模型      def getSaver(self):          weight = tensorflow.Variable(tensorflow.random_normal([self.input_size, self.output_size]), dtype=tensorflow.float32,name='weight')            biases = tensorflow.Variable(tensorflow.zeros([1, self.output_size]) + 0.1, dtype=tensorflow.float32, name='biases')            saver = tensorflow.train.Saver()          saver.restore(self.session,self.save_path)            self._setWeight(weight)          self._setBiases(biases)        def recognize(self,origin_input):          input = tensorflow.placeholder(tensorflow.float32,[None,784])          weight = self._getWeight()          biases = self._getBiases()            result = tensorflow.matmul(input,weight) + biases          resultSof = tensorflow.nn.softmax(result,) # 把结果集使用softmax进行激励          resultSig = tensorflow.nn.sigmoid(resultSof,) # 把结果集以sigmoid函数进行激励,用于后续分类          output = self.session.run(resultSig,{input:origin_input})            output = output[0]            # 对识别结果进行分类处理          output_tmp = []          for item in output:              if item < 0.6:                  output_tmp.append(0)              else :                  output_tmp.append(1)            return output_tmp        def _getInput(self):          inputs, y = self.mnist.train.next_batch(100);          return [inputs[50]]

以上是程序,整个程序基于TensorFlow来实现的,具体的TensorFlow安装我就不说了。

整个训练过程不做多说,我发现网上关于训练的教程很多,但是训练结果的教程很少。

整个程序里,通过tensorflow.train.Saver()的save进行训练结果模型进行存储,然后再用tensorflow.train.Saver()的restore进行模型恢复然后取到训练好的weight和baises。

这里要注意的一个地方是因为一次性随机取出100张手写图片进行批量训练的,我在取的时候其实也是批量随机取100张,但是我传入识别的是一张,通过以下这段程序:

def _getInput(self):          inputs, y = self.mnist.train.next_batch(100);          return [inputs[50]]

注意一下return这里的数据结构,其实是取这批量的第50张,实际上这段程序写成:

def _getInput(self):          inputs, y = self.mnist.train.next_batch(1);          return [inputs[0]]

会更好。

因为识别的时候是需要用到训练的隐藏层来进行的,所以在此我虽然识别的是一张图片,但是我必须要传入一个批量数据的这样一个结构。

然后再识别的地方,我使用了两个激励函数:

resultSof = tensorflow.nn.softmax(result,) # 把结果集使用softmax进行激励  resultSig = tensorflow.nn.sigmoid(resultSof,) # 把结果集以sigmoid函数进行激励,用于后续分类

这里的话,***个softmax激励后的数据我发现得到的是以e为底的指数形式,转换成普通的浮点数来看,不是很清楚到底是什么,那么我在做识别数字判断的时候就不方便,所以再通过了一次sigmoid的激励。

后续我通过一个循环判断进行一次实际上的分类,这个原因首先要说到识别结果形式:

[0,0,0,0,0,0,0,0,1,0]

像以上这个数据,表示的是8,也就是说,数组下表第几位为1就表示是几,如0的表示:

[1,0,0,0,0,0,0,0,0,0]

而sigmoid函数在这个地方其实就是对每个位置的数据进行了分类,我发现如果分类值小于0.52这样的数据其实代表的是否,也就是说此位置的值对应的是0,大于0.52应该对应的是真,也就是1;而我在程序里取的是0.6为界限做判断。

实际上,这个界限值应该是在神经网络训练的时候取的,而不是看识别结果来进行凭感觉取的(虽然训练的时候的参数也是凭感觉取的)

上述内容就是单层的基础神经网络基于TensorFlow如何实现手写字识别,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 单层的基础神经网络基于TensorFlow如何实现手写字识别

本文链接: https://www.lsjlt.com/news/286943.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 单层的基础神经网络基于TensorFlow如何实现手写字识别
    本篇文章为大家展示了单层的基础神经网络基于TensorFlow如何实现手写字识别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。先上代码import tensorflow &nbs...
    99+
    2023-06-17
  • Python神经网络TensorFlow基于CNN卷积识别手写数字
    目录基础理论一、训练CNN卷积神经网络1、载入数据2、改变数据维度3、归一化4、独热编码5、搭建CNN卷积神经网络5-1、第一层:第一个卷积层5-2、第二层:第二个卷积层5-3、扁平...
    99+
    2024-04-02
  • 基于Tensorflow搭建一个神经网络的实现
    一、Tensorlow结构 import tensorflow as tf import numpy as np #创建数据 x_data = np.random.rand(...
    99+
    2024-04-02
  • 用PyTorch构建基于卷积神经网络的手写数字识别模型
    本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、MINST数据集介绍与分析 二、卷积神经网络 三、基于卷积神经网络的手写数字识别 一、MINST数据集...
    99+
    2023-09-06
    python 机器学习 人工智能 深度学习
  • 基于Tensorflow如何搭建一个神经网络
    小编给大家分享一下基于Tensorflow如何搭建一个神经网络,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、Tensorlow结构import te...
    99+
    2023-06-15
  • 基于Matlab实现BP神经网络交通标志识别
    目录一、BP神经网络交通标志识别简介二、部分源代码三、运行结果一、BP神经网络交通标志识别简介 道路交通标志用以禁止、警告、指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能...
    99+
    2024-04-02
  • 基于Python3 神经网络的实现
    本次学习是Denny Britz(作者)的Python2神经网络项目修改为基于Python3实现的神经网络(本篇博文代码完整)。重在理解原理和实现方法,部分翻译不够准确,可查看Python2版的原文。原文英文地址(基于Python2)安装P...
    99+
    2023-01-31
    神经网络
  • 基于Pytorch的神经网络如何实现Regression
    这篇文章将为大家详细讲解有关基于Pytorch的神经网络如何实现Regression,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.引言我们之前已经介绍了神经网络的基本知识,神经网络的主要作用就是预测与...
    99+
    2023-06-29
  • 纯numpy卷积神经网络实现手写数字识别的实践
    前面讲解了使用纯numpy实现数值微分和误差反向传播法的手写数字识别,这两种网络都是使用全连接层的结构。全连接层存在什么问题呢?那就是数据的形状被“忽视”了。...
    99+
    2024-04-02
  • 基于Java实现的一层简单人工神经网络算法示例
    本文实例讲述了基于Java实现的一层简单人工神经网络算法。分享给大家供大家参考,具体如下:先来看看笔者绘制的算法图:数据类import java.util.Arrays;public class Data { double[] vecto...
    99+
    2023-05-30
    java 神经网络 算法
  • Python如何利用三层神经网络实现手写数字分类
    这篇文章主要讲解了“Python如何利用三层神经网络实现手写数字分类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何利用三层神经网络实现手写数字分类”吧!一、神经网络组成一个完...
    99+
    2023-06-21
  • 基于Pytorch的神经网络之Regression的实现
    目录1.引言2.神经网络搭建2.1准备工作2.2搭建网络2.3训练网络3.效果4.完整代码1.引言 我们之前已经介绍了神经网络的基本知识,神经网络的主要作用就是预测与分类,现在让我们...
    99+
    2024-04-02
  • Python基于TensorFlow接口实现深度学习神经网络回归
    目录1 写在前面2 代码分解介绍2.1 准备工作2.2 参数配置2.3 原有模型删除2.4 数据导入与数据划分2.5 Feature Columns定义2.6 模型优化方法构建与模型...
    99+
    2023-02-17
    Python TensorFlow深度学习神经网络回归 Python TensorFlow Python 神经网络回归
  • Java实现BP神经网络MNIST手写数字识别的示例详解
    目录一、神经网络的构建二、系统架构服务器客户端采用MVC架构一、神经网络的构建 (1):构建神经网络层次结构 由训练集数据可知,手写输入的数据维数为784维,而对应的输出结果为分别为...
    99+
    2023-01-31
    Java实现手写数字识别 Java手写数字识别 Java数字识别
  • 基于Matlab如何实现人工神经网络回归
    这篇文章主要介绍了基于Matlab如何实现人工神经网络回归的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Matlab如何实现人工神经网络回归文章都会有所收获,下面我们一起来看看吧。首先需要注明的是,在MAT...
    99+
    2023-07-05
  • 如何基于opencv实现简单的数字识别
    目录前言要解决的问题解决问题的思路总结前言 由于自己学识尚浅,不能用python深度学习来识别这里的数字,所以就完全采用opencv来识别数字,然后在这里分享、记录一下自己在学习过程...
    99+
    2024-04-02
  • Python利用三层神经网络实现手写数字分类详解
    目录前言一、神经网络组成二、代码实现1.引入库2.导入数据集3.全连接层4.ReLU激活函数层5.Softmax损失层6.网络训练与推断模块三、代码debug四、结果展示补充前言 本...
    99+
    2024-04-02
  • TensorFlow中的卷积神经网络是如何实现的
    在TensorFlow中,卷积神经网络(CNN)的实现通常涉及以下步骤: 定义输入数据:首先,需要定义CNN的输入数据,通常是一...
    99+
    2024-03-01
    TensorFlow
  • 神经网络理论基础及Python实现是怎么样的
    本篇文章给大家分享的是有关神经网络理论基础及Python实现是怎么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、多层前向神经网络多层前向神经网络由三部分组成:输出层、隐...
    99+
    2023-06-17
  • Python中如何进行基于BP神经网络的预测
    今天就跟大家聊聊有关Python中如何进行基于BP神经网络的预测,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、Introduction1 BP神经网络的优点非线性映射能力:BP神...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作