tensorflow 全连接神经网络识别mnist数据

之前没有学过tensorflow,所以使用tensorflow来对mnist数据进行识别,采用最简单的全连接神经网络,第一层是784,(输入层),隐含层是256,输出层是10

,相关注释卸载程序中。

  1 #!/usr/bin/env python 3.6
  2 #_*_coding:utf-8 _*_
  3 #@Time    :2020/2/12 15:34
  4 #@Author  :hujinzhou 
  5 #@FileName: mnist.py
  6
  7 #@Software: PyCharm
  8 import tensorflow as tf
  9 import tensorflow.examples.tutorials.mnist.input_data as input_data
 10 import matplotlib.pyplot as plt
 11 import numpy as np
 12 from time import time
 13 mnist=input_data.read_data_sets("MNIST_data/",one_hot=True)#通过tensorflow下载mnist数据集
 14 """图片的显示"""
 15 def plot_image(image):
 16     plt.imshow(image.reshape(28,28),cmap=‘binary‘)#tensorflow中的数据是将图片平铺成一列的存储,
 17                                                   # 所以显示的时候应该reshape成28*28
 18     plt.show()
 19 """查看多项数训练数据images与labels"""
 20 def plot_images_labels_prediction(images,labels,prediction,idx,num):#idx表示要显示的第idx个图像从idx~idx+25
 21     fig=plt.gcf()
 22     fig.set_size_inches(25,25)#设置显示尺寸
 23     if num>25:num=25
 24     for i in range(0,num):
 25         ax=plt.subplot(5,5,i+1)#一次显示多个子图
 26         ax.imshow(np.reshape(images[idx],(28,28)),cmap=‘binary‘)#将第idx个图像数据reshape成28*28的numpy并显示
 27         title="label="+str(np.argmax(labels[idx]))#设置图像的title,将onehot码转为数值码
 28         """如果有预测的prediction,则重新写title"""
 29         if len(prediction)>0:
 30             title+=",predict="+str(prediction[idx])
 31         ax.set_title(title,fontsize=10)
 32         ax.set_xticks([]);ax.set_yticks([])#设置xy轴为空,如果不设置则会有标度(像素值)
 33         idx+=1
 34     plt.show()
 35
 36
 37 """构造多层感知机"""
 38 """自己构造感知机"""
 39 # def layer(output_dim, input_dim, inputs, activation=None):
 40 #     W = tf.Variable(tf.random_normal([input_dim, output_dim]))
 41 #     b = tf.Variable(tf.random_normal([1, output_dim]))
 42 #     XWb = tf.matmul(inputs, W) + b
 43 #     if activation is None:
 44 #         outputs = XWb
 45 #     else:
 46 #         outputs = activation(XWb)
 47 #     return outputs
 48
 49 """采用tf包来构造感知机"""
 50 x = tf.placeholder("float", [None, 784])
 51 h1=tf.layers.dense(inputs=x,units=256,activation=tf.nn.relu)
 52 # h1 = layer(output_dim=256, input_dim=784,
 53 #            inputs=x, activation=tf.nn.relu)
 54 y_predict = tf.layers.dense(inputs=h1,units=10,activation=None)
 55 y_label = tf.placeholder("float", [None, 10])
 56 loss_function = tf.reduce_mean(
 57     tf.nn.softmax_cross_entropy_with_logits_v2
 58     (logits=y_predict,
 59      labels=y_label))#计算损失值
 60 optimizer = tf.train.AdamOptimizer(learning_rate=0.001)  61     .minimize(loss_function)#使用优化器反向传播,使得损失量为最小
 62 correct_prediction = tf.equal(tf.argmax(y_label, 1),
 63                               tf.argmax(y_predict, 1))#相等为1,不想等为0,统计正确的个数
 64 accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))#精度等于正确个数除以总数
 65 """训练过程"""
 66 train_epoch=30
 67 batch_size=100
 68 loss_list=[];epoch_list=[];accuracy_list=[]
 69 starttime=time()
 70
 71
 72 sess=tf.Session()
 73 sess.run(tf.global_variables_initializer())
 74 for epoch in range(train_epoch):
 75     for i in range(550):
 76         batch_x, batch_y = mnist.train.next_batch(batch_size)
 77         sess.run(optimizer, feed_dict={x: batch_x, y_label: batch_y})#使用55000的训练集进行优化
 78
 79     loss, acc = sess.run([loss_function, accuracy],
 80                          feed_dict={x: mnist.validation.images,
 81                                     y_label: mnist.validation.labels})#验证集进行验证
 82
 83     epoch_list.append(epoch);
 84     loss_list.append(loss)
 85     accuracy_list.append(acc)
 86     print("Train Epoch:", ‘%02d‘ % (epoch + 1), "Loss=",  87           "{:.9f}".format(loss), " Accuracy=", acc)
 88 duration = time() - starttime
 89 print("The process has taken;{:.10f}".format(duration))
 90 fig2=plt.gcf()
 91 fig2.set_size_inches(4,2)#设置显示尺寸
 92 plt.plot(epoch_list,loss_list,label="loss")
 93
 94 plt.ylabel(‘loss‘)
 95 plt.xlabel(‘epoch‘)
 96 plt.legend([‘loss‘],loc=‘upper left‘)
 97 plt.show()
 98 plt.plot(epoch_list,accuracy_list,label=‘acc‘)
 99 plt.show()
100 # sess=tf.Session()
101 # init = tf.global_variables_initializer()
102 # sess.run(init)
103 #注意这个地方,不可以重新设置sess,不可以重新开启回话,重新开启会错误
104 print("acc:",sess.run(accuracy,feed_dict={x:mnist.test.images,y_label:mnist.test.labels}))
105
106 pre_result=sess.run(tf.argmax(y_predict,1),feed_dict={x:mnist.test.images})
107 plot_images_labels_prediction(mnist.test.images,mnist.test.labels,pre_result,0,25)
108 sess.close()

原文地址:https://www.cnblogs.com/hujinzhou/p/guobao_2020_2_13.html

时间: 2024-08-18 12:03:31

tensorflow 全连接神经网络识别mnist数据的相关文章

【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型

初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构建CNN[待学习] 全连接+各种优化[待学习] BN层[待学习] 先解释以下MNIST数据集,训练数据集有55,000 条,即X为55,000 * 784的矩阵,那么Y为55,000 * 10的矩阵,每个图片是28像素*28像素,带有标签,Y为该图片的真实数字,即标签,每个图片10个数字,1所在位置

前馈全连接神经网络和函数逼近、时间序列预测、手写数字识别

https://www.cnblogs.com/conmajia/p/annt-feed-forward-fully-connected-neural-networks.html Andrew Kirillov 著Conmajia 译2019 年 1 月 12 日 原文发表于 CodeProject(2018 年 9 月 28 日). 中文版有小幅修改,已获作者本人授权. 本文介绍了如何使用 ANNT 神经网络库生成前馈全连接神经网络并应用到问题求解. 全文约 12,000 字,建议阅读时间 3

matlab练习程序(神经网络识别mnist手写数据集)

记得上次练习了神经网络分类,不过当时应该有些地方写的还是不对. 这次用神经网络识别mnist手写数据集,主要参考了深度学习工具包的一些代码. mnist数据集训练数据一共有28*28*60000个像素,标签有60000个. 测试数据一共有28*28*10000个,标签10000个. 这里神经网络输入层是784个像素,用了100个隐含层,最终10个输出结果. arc代表的是神经网络结构,可以增加隐含层,不过我试了没太大效果,毕竟梯度消失. 因为是最普通的神经网络,最终识别错误率大概在5%左右. 迭

全连接神经网络 MLP

全连接神经网络 MLP 最近开始进行模型压缩相关课题,复习一下有关的基础知识. 1. MLP简介 上图是一个简单的MLP,这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层. 为了方便下面的公式描述,引入一张带公式的图. i是input层,h是hide层,o是output层. 2. MLP 正向传播 正向传播其实就是预测过程,就是由输入到输出的过程. 为之前的图片赋上初值, 上述变量中,存在着如下过程:原始输入-> 带权计算-> ne

pytorch实现MNIST手写体识别(全连接神经网络)

环境: pytorch1.1 cuda9.0 ubuntu16.04 该网络有3层,第一层input layer,有784个神经元(MNIST数据集是28*28的单通道图片,故有784个神经元).第二层为hidden_layer,设置为500个神经元.最后一层是输出层,有10个神经元(10分类任务).在第二层之后还有个ReLU函数,进行非线性变换. #!/usr/bin/env python # encoding: utf-8 ''' @author: liualex @contact: [em

手写数字识别——基于全连接层和MNIST数据集

本文使用TensorFlow2.0手动搭建简单的全连接网络进行MNIST手写数据集的分类识别,逐步讲述实现过程,穿插TensorFlow2.0语法,文末给出完整的代码.废话少说,开始动手吧! 一.量子波动撸代码 该节先给出各代码片段,第二节将这些片段汇总成程序,这些代码片段故意包含了一些错误之处,在第二节中会进行一一修正.如要正确的代码,请直接参考第三节.如若读者有一番闲情逸致,可跟随笔者脚步,看看自己是否可以事先发现这些错误. 首先,导入依赖的两个模块,一个是tensorflow,另一个是te

torch教程[1]用numpy实现三层全连接神经网络

torch的第一个例子程序,是用numpy函数实现神经网络.cs231n的课程中有大量这样的作业. import numpy as np N,D_in,H,D_out=64,1000,100,10 x=np.random.randn(D_in,H) x=np.random.randn(N,D_in) y=np.random.randn(N,D_out) w1=np.random.randn(D_in,H) w2=np.random.randn(H,D_out) learning_rate=1e-

使用tensorflow操作MNIST数据

本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有Hello World,机器学习入门有MNIST.在此节,我将训练一个机器学习模型用于预测图片里面的数字. MNIST 是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会被用做深度学习的入门样例.而Tensorflow的封装让MNIST数据集变得更加方便.MNIST是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据.在MNIST数据集中的

神经网络之全连接层(线性层)

对于神经网络的全连接层,前面已经使用矩阵的运算方式实现过,本篇将引入tensorflow中层的概念, 正式使用deep learning相关的API搭建一个全连接神经网络.下面是全连接神经网络的结构图 其中,x1,x2,x3为输入,a1,a2,a3为输出,运算关系如下: x1,x2,x3所在的层叫神经网络的输入层,a1,a2,a3所在的层叫神经网络的输出层,如果两层中间还有若干层,那么中间的这些层叫做隐藏层. 那么,如何使用tensorflow去创建这样的层呢?其实非常简单,只需要调用tf.ke