TensorFlow 训练 MNIST (1)—— softmax 单层神经网络

1、MNIST数据集简介

  首先通过下面两行代码获取到TensorFlow内置的MNIST数据集:

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets(‘./data/mnist‘, one_hot=True)

  MNIST数据集共有55000(mnist.train.num_examples)张用于训练的数据,对应的有55000个标签;共有10000(mnist.test.num_examples)张用于测试的图片的数据,同样的有10000个标签与之对应。为了方便访问,这些图片或标签的数据都是被格式化了的。

  MNIST数据集的训练数据集(mnist.train.images)是一个 55000 * 784 的矩阵,矩阵的每一行代表一张图片(28 * 28 * 1)的数据,图片的数据范围是 [0, 1],代表像素点灰度归一化后的值。

  训练集的标签(mnist.train.labels)是一个55000 * 10 的矩阵,每一行的10个数字分别代表对应的图片属于数字0到9的概率,范围是0或1。一个标签行只有一个是1,表示该图片的正确数字是对应的下标值, 其余是0。

  测试集与训练集的类似,只是数据量不同。

  以下代码显示部分MNIST训练图片的形状及标签:

import numpy as np
import matplotlib.pyplot as plot
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets(‘./data/mnist‘, one_hot=True)
trainImages = mnist.train.images
trainLabels = mnist.train.labels

plot.figure(1, figsize=(4, 3))
for i in range(6):
    curImage = np.reshape(trainImages[i, :], (28, 28))
    curLabel = np.argmax(trainLabels[i, :])
    ax = plot.subplot(int(str(23) + str(i+1)))
    plot.imshow(curImage, cmap=plot.get_cmap(‘gray‘))
    plot.axis(‘off‘)
    ax.set_title(curLabel)

plot.suptitle(‘MNIST‘)
plot.show()

  上述代码输出的MNIST图片及其标签:

 2、通过单层神经网络进行训练

 1 def train(trainCycle=50000, debug=False):
 2     inputSize  = 784
 3     outputSize = 10
 4     batchSize  = 64
 5     inputs = tf.placeholder(tf.float32, shape=[None, inputSize])
 6
 7     # x * w = [64, 784] * [784, 10]
 8     weights   = tf.Variable(tf.random_normal([784, 10], 0, 0.1))
 9     bias      = tf.Variable(tf.random_normal([outputSize], 0, 0.1))
10     outputs   = tf.add(tf.matmul(inputs, weights), bias)
11     outputs   = tf.nn.softmax(outputs)
12
13     labels = tf.placeholder(tf.float32, shape=[None, outputSize])
14
15     loss      = tf.reduce_mean(tf.square(outputs - labels))
16     optimizer = tf.train.GradientDescentOptimizer(0.1)
17     trainer   = optimizer.minimize(loss)
18
19     sess = tf.Session()
20     sess.run(tf.global_variables_initializer())
21     for i in range(trainCycle):
22         batch = mnist.train.next_batch(batchSize)
23         sess.run([trainer, loss], feed_dict={inputs: batch[0], labels: batch[1]})
24
25         if debug and i % 1000 == 0:
26             corrected = tf.equal(tf.argmax(labels, 1), tf.argmax(outputs, 1))
27             accuracy = tf.reduce_mean(tf.cast(corrected, tf.float32))
28             accuracyValue = sess.run(accuracy, feed_dict={inputs: batch[0], labels: batch[1]})
29             print(i, ‘ train set accuracy:‘, accuracyValue)
30
31     # 测试
32     corrected = tf.equal(tf.argmax(labels, 1), tf.argmax(outputs, 1))
33     accuracy = tf.reduce_mean(tf.cast(corrected, tf.float32))
34     accuracyValue = sess.run(accuracy, feed_dict={inputs: mnist.test.images, labels: mnist.test.labels})
35     print("accuracy on test set:", accuracyValue)
36
37     sess.close()

3、训练结果

  上述模型的最终输出为:

由打印日志可以看出,前期收敛速度很快,后期开始波动。最后该模型在训练集上的正确率大概为90%,测试集上也差不多。精度还是比较低的,说明单层的神经网络在处理图片数据上存在着很大的缺陷,并不是一个很好的选择。

本文地址:https://www.cnblogs.com/laishenghao/p/9576806.html

原文地址:https://www.cnblogs.com/laishenghao/p/9576806.html

时间: 2024-11-08 22:33:41

TensorFlow 训练 MNIST (1)—— softmax 单层神经网络的相关文章

TensorFlow训练MNIST数据集(3) —— 卷积神经网络

前面两篇随笔实现的单层神经网络 和多层神经网络, 在MNIST测试集上的正确率分别约为90%和96%.在换用多层神经网络后,正确率已有很大的提升.这次将采用卷积神经网络继续进行测试. 1.模型基本结构 如下图所示,本次采用的模型共有8层(包含dropout层).其中卷积层和池化层各有两层. 在整个模型中,输入层负责数据输入:卷积层负责提取图片的特征:池化层采用最大池化的方式,突出主要特征,并减少参数维度:全连接层再将个特征组合起来:dropout层可以减少每次训练的计算量,并可以一定程度上避免过

tensorflow识别Mnist时,训练集与验证集精度acc高,但是测试集精度低的比较隐蔽的原因

tensorflow识别Mnist时,训练集与验证集精度acc高,但是测试集精度低的比较隐蔽的原因除了网上说的主要原因https://blog.csdn.net/wangdong2017/article/details/90176323 之外,还有一种是比较隐蔽的原因(可能对于大多数人不会犯这种低级错误),作为新手的我找了半天才找到,原因是在程序中创建了一个会话之后又重新创建了一个会话,代码程序见我博客https://www.cnblogs.com/hujinzhou/p/guobao_2020

TensorFlow框架(4)之CNN卷积神经网络详解

1. 卷积神经网络 1.1 多层前馈神经网络 多层前馈神经网络是指在多层的神经网络中,每层神经元与下一层神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接的情况,如图 11所示. 图 11 对于上图中隐藏层的第j个神经元的输出可以表示为: 其中,f是激活函数,bj为每个神经元的偏置. 1.2 卷积神经网络 1.2.1 网络结构 卷积神经网络与多层前馈神经网络的结构不一样,其每层神经元与下一层神经元不是全互连,而是部分连接,即每层神经层中只有部分的神经元与下一层神经元有连接,但是神经元之间

TensorFlow深入MNIST笔记[三]

TensorFlow深入MNIST笔记[三] TensorFlow是进行大规模数值计算的强大库.其优点之一是实施和训练深层神经网络. 加载MNIST数据 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data', one_hot=True) 这mnist是一个轻量级的类,它将训练,验证和测试集存储为NumPy数组.它还提供了一个迭代数据服务的功

使用tensorflow操作MNIST数据

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

『TensorFlow』函数查询列表_神经网络相关

神经网络(Neural Network) 激活函数(Activation Functions) 操作 描述 tf.nn.relu(features, name=None) 整流函数:max(features, 0) tf.nn.relu6(features, name=None) 以6为阈值的整流函数:min(max(features, 0), 6) tf.nn.elu(features, name=None) elu函数,exp(features) - 1 if < 0,否则featuresE

Google发布机器学习平台Tensorflow游乐场~带你玩神经网络(转载)

Google发布机器学习平台Tensorflow游乐场-带你玩神经网络 原文地址:http://f.dataguru.cn/article-9324-1.html> 摘要: 昨天,Google发布了Tensorflow游乐场.Tensorflow是Google今年推出的机器学习开源平台.而有了Tensorflow游乐场,我们在浏览器中就可以训练自己的神经网络,还有酷酷的图像让我们更直观地了解神经网络的工作原理.今 ... 网络 工具 机器学习 神经网络 Tensorflow 昨天,Google发

Tensorflow训练识别自定义图片

很多正在入门或刚入门TensorFlow机器学习的同学希望能够通过自己指定图片源对模型进行训练,然后识别和分类自己指定的图片.但是,在TensorFlow官方入门教程中,并无明确给出如何把自定义数据输入训练模型的方法.现在,我们就参考官方入门课程<Deep MNIST for Experts>一节的内容(传送门:https://www.tensorflow.org/get_started/mnist/pros),介绍如何将自定义图片输入到TensorFlow的训练模型. 在<Deep M

2017/7/20 朱兴全教授学术讲座观点与总结第二讲:单个神经元/单层神经网络

一.神经网络的结构 习惯的强势:能量最小化   大脑控制区在人对某一个事情形成习惯后,在该事情发生时,作出判断时不再消耗能量.(能量最小化与误差最小化?我想知道这里的能量与一般的能量函数之间有没有什么联系的地方?) 前向网络:网络中只有输入到输出的连接(下面给出单层和多层前向网络) 非隐藏层中可以比较期望输出与真实输出(注意观察最后一层的独立性,各个输出对权重的调整互不影响) Why RNN? 前后顺序有相关性,时间顺序之间相关性,例如:文本分析. 神经网络(结构.神经元.学习算法)  神经元