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、通过单层神经网络进行训练
def train(trainCycle=50000, debug=False):
inputSize = 784
outputSize = 10
batchSize = 64
inputs = tf.placeholder(tf.float32, shape=[None, inputSize]) # x * w = [64, 784] * [784, 10]
weights = tf.Variable(tf.random_normal([784, 10], 0, 0.1))
bias = tf.Variable(tf.random_normal([outputSize], 0, 0.1))
outputs = tf.add(tf.matmul(inputs, weights), bias)
outputs = tf.nn.softmax(outputs) labels = tf.placeholder(tf.float32, shape=[None, outputSize]) loss = tf.reduce_mean(tf.square(outputs - labels))
optimizer = tf.train.GradientDescentOptimizer(0.1)
trainer = optimizer.minimize(loss) sess = tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(trainCycle):
batch = mnist.train.next_batch(batchSize)
sess.run([trainer, loss], feed_dict={inputs: batch[0], labels: batch[1]}) if debug and i % 1000 == 0:
corrected = tf.equal(tf.argmax(labels, 1), tf.argmax(outputs, 1))
accuracy = tf.reduce_mean(tf.cast(corrected, tf.float32))
accuracyValue = sess.run(accuracy, feed_dict={inputs: batch[0], labels: batch[1]})
print(i, ' train set accuracy:', accuracyValue) # 测试
corrected = tf.equal(tf.argmax(labels, 1), tf.argmax(outputs, 1))
accuracy = tf.reduce_mean(tf.cast(corrected, tf.float32))
accuracyValue = sess.run(accuracy, feed_dict={inputs: mnist.test.images, labels: mnist.test.labels})
print("accuracy on test set:", accuracyValue) sess.close()
3、训练结果
上述模型的最终输出为:

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

本文地址:https://www.cnblogs.com/laishenghao/p/9576806.html
TensorFlow训练MNIST数据集(1) —— softmax 单层神经网络的更多相关文章
- TensorFlow 训练MNIST数据集(2)—— 多层神经网络
在我的上一篇随笔中,采用了单层神经网络来对MNIST进行训练,在测试集中只有约90%的正确率.这次换一种神经网络(多层神经网络)来进行训练和测试. 1.获取MNIST数据 MNIST数据集只要一行代码 ...
- TensorFlow训练MNIST数据集(3) —— 卷积神经网络
前面两篇随笔实现的单层神经网络 和多层神经网络, 在MNIST测试集上的正确率分别约为90%和96%.在换用多层神经网络后,正确率已有很大的提升.这次将采用卷积神经网络继续进行测试. 1.模型基本结构 ...
- 使用tensorflow实现mnist手写识别(单层神经网络实现)
import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as input_data import n ...
- 2、TensorFlow训练MNIST
装载自:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html TensorFlow训练MNIST 这个教程的目标读者是对机器学习和T ...
- 一个简单的TensorFlow可视化MNIST数据集识别程序
下面是TensorFlow可视化MNIST数据集识别程序,可视化内容是,TensorFlow计算图,表(loss, 直方图, 标准差(stddev)) # -*- coding: utf-8 -*- ...
- 使用caffe训练mnist数据集 - caffe教程实战(一)
个人认为学习一个陌生的框架,最好从例子开始,所以我们也从一个例子开始. 学习本教程之前,你需要首先对卷积神经网络算法原理有些了解,而且安装好了caffe 卷积神经网络原理参考:http://cs231 ...
- 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...
- TensorFlow训练MNIST报错ResourceExhaustedError
title: TensorFlow训练MNIST报错ResourceExhaustedError date: 2018-04-01 12:35:44 categories: deep learning ...
- 深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)
1. tf.matmul(X, w) # 进行点乘操作 参数说明:X,w都表示输入的数据, 2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False 参 ...
随机推荐
- sql server 用户'sa'登录失败(错误18456)
转载于:http://thenear.blog.51cto.com/4686262/865544 用户'sa'登录失败(错误18456)解决方案图解 当我们在使用sql server 的时候可 ...
- 转:Newtonsoft.Json高级用法
原文地址:http://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多 ...
- ln 硬链接介绍
硬链接:在linux文件系统中多个文件名指向同一个索引节点(Inode)是正常允许的.硬链接文件就相当于文件的另一个入口. 硬链接的作用:允许一个文件拥有多个有效路径(多个入口),这样用户就可以建立硬 ...
- ORACLE 查看并修改最大连接数
第一步,在cmd命令行,输入sqlplus,打开登录窗口,如下: 第二步,根据提示输入用户名与密码 请输入用户名:sys as sysdba 输入口令:******** 第三步,查看processes ...
- 一起学习Boost标准库--Boost.StringAlgorithms库
概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的com ...
- October 11th 2017 Week 41st Wednesday
If you don't know where you are going, you might not get there. 如果你不知道自己要去哪里,你可能永远到不了那里. The reward ...
- cpu的核心数及线程关系
CPU个数.核心数.逻辑CPU个数:一个物理CPU可以有多个核心,一个CPU核就是一个物理线程,由英特尔开发超线程技术可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥 ...
- C++构造析构函数生命期及对象生命期
- BZOJ4894:天赋(矩阵树定理)
Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有一些天赋必须是要有前置天赋才能够学习得到的. 也就是说,有一些天赋必须是要在 ...
- Integer、String、StringBuffer、StringBuilder
Integer Interger 是int基本数据类型的包装类,在Integer内部封装了一个final int value的属性. 构造方法: Integer类提供了两种构造方法:它们都会返回一个I ...