在pycharm中完成MNIST训练

MNIST数据训练入门

通过该训练来进行第一个机器学习的数据训练过程,类似于编程语言中的helloworld.
MNIST是入门级的CV数据集,包含手写的数字图片,从0~9.任务就是训练以使得机器能够识别图像中的数字内容。

数据集介绍

数据中包含60k的训练数据集(mnist.train)和10k的测试数据集(minst.test),这两个集合中每个又包括一个用于存储手写数字图像的集合(mnist.xxx.image)和一个用于标志图像对应编号的标签的集合(mnist.xxx.label)
每张图片像素为28×28,用一个数字数组来表示图片。将数组展开成一个向量,容量为28x28 = 784。如何展开这个数组(数字间的顺序)不重要,只要保持各个图片采用相同的方式展开。
用矩阵中的数字表示像素点
在数组中,空白的的地方用0来标注,完全黑的地方用1标注,在其之间灰色的地方用(0,1)范围内的的数字进行标注。对于整个数据集来说,mnist.train.images整体是一个大小为 [60000, 784] 的张量,第一个维度数字是图片的序号,第二维度表示每张图片中的像素点,点中的值代表该像素的强度大小(是否足够黑),范围为[0,1]
mnist.train.label整体是一个大小为[60000,10]的矩阵,第一个维度是图片序号,第二个维度是表示图片中的数字是多少,比如3,表示成([0,0,0,1,0,0,0,0,0,0])

训练方法

使用softmax方法来计算每一张照片会有更大的概率是数字几,即计算照片中图像属于某个特定数字类的证据(evidence),其实际计算过程
evidence[i] = ∑[j] W[i,j]×x[j]+b[i]
b[i]为偏置量
该方法的具体分析和详细内容作为下一学习步骤的理论学习内容,这里暂时跳过

代码实现

在上一次工作的基础上(https://blog.csdn.net/zzyincsdn/article/details/83342304),在代码中导入tensorflow,以及用于下载数据集的文件input_data.py(与工程文件放于同一文件夹目录下即可)

import tensorflow as tf
import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
x = tf.placeholder("float", [None, 784])
'''
x是一个占位符placeholder,在TensorFlow运行计算时输入这个值。我们希望能够输入任意数量的MNIST图像,
(这里的None表示此张量的第一个维度可以是任何长度的。) 
'''
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W) + b)

y_ = tf.placeholder("float", [None,10])

#为了计算交叉熵,我们首先需要添加一个新的占位符用于输入正确值:

cross_entropy = -tf.reduce_sum(y_*tf.log(y))

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
'''
要求TensorFlow用梯度下降算法(gradient descent algorithm)以0.01的学习速率最小化交叉熵。
TensorFlow在这里实际上所做的是,它会在后台给描述你的计算的那张图里面,增加一系列新的计算操作单元用于实现反向传播算法和梯度下降算法。
然后,它返回给你的只是一个单一的操作,当运行这个操作时,它用梯度下降算法训练你的模型,微调你的变量,不断减少成本。
'''
init = tf.global_variables_initializer()
#初始化我们创建的变量,此处使用新版本tensorflow的global_variables_initializer()去初始化变量,原版的initialize_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值