您的位置:首页 > 其它

一个菜鸡的自强之路-MNIST手写数字分类问题(基础篇)

2019-04-01 20:47 155 查看
版权声明:版权所有 翻版必究 转载请注明来源 谢谢配合!!! https://blog.csdn.net/snail_youth/article/details/88955432

各种模块各种函数一一查询,还是不是很理解MNIST手写数字分类问题(基础篇)的实现,作为菜鸡先记录下来,留作以后复盘使用。废话不多说,先进入正题。

一、实例代码

当然我是一个比较懒的人,为了防止下次还需要重新手敲代码,所以这里肯定会贴一个源代码的。

[code]import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
#引入模块和官方minist实例
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
#下载测试数据和训练数据,存放在同py文件MNIST_data文件夹中
x = tf.placeholder("float", [None, 784])
#插入一个张量占位符x
W = tf.Variable(tf.zeros([784,10]))
#定义图变量w为一个以0.填充的784x10的数组
b = tf.Variable(tf.zeros([10]))
#定义图变量b为一个以0.填充的1x10的数组
y = tf.nn.softmax(tf.matmul(x,W) + b)
#x,w数组相乘再加上b做softmax运算
y_ = tf.placeholder("float", [None,10])
#插入一个张量占位符y_
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
#各维度上之和取反(计算交叉熵)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
#tensorflow用梯度下降算法以0.01的学习率最小化交叉熵
init = tf.initialize_all_variables()
#添加操作来初始化创建的变量
sess = tf.Session()
sess.run(init)
#启动模型,初始化变量
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
#随机抓取训练数据中的100个批处理数据点替换掉占位符来运行train_step
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
#计算1在y和y_中的索引号,如果相等则返回true,否则false
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
#计算true和false变成1和0后的平均值
print(i, sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
#输出训练后测试数据的准确率
sess.close()

 

二、模块函数小解

1、tensorflow.placeholder()

格式:placeholder( dtype, shape=None, name=None )

意义:插入一个张量的占位符,这个张量将一直被提供.不可直接参与计算.

参数解析:dtype:要输入的张量中元素的类型.

                  shape:要输入的张量的形状(可选).如果未指定形状,则可以输入任何形状的张量.

                  name:操作的名称(可选,也就是爱写不写).

实例:

 

2、tensorflow.reduce_sum()

格式:reduce_sum (     input_tensor ,     axis = None ,     keep_dims = False ,     name = None ,     reduction_indices = None  )

意义:计算一个张量的各个维度上元素的总和

参数解析:input_tensor:要减少的张量.应该有数字类型.

                 axis:要减小的尺寸.如果为None(默认),则缩小所有尺寸.必须在范围[-rank(input_tensor), rank(input_tensor))内.                           keep_dims:如果为true,则保留长度为1的缩小尺寸

                name:操作的名称(可选,也就是爱写不写).

                reduction_indices:axis的废弃的名称.

实例:

3、tensorflow.reduce_mean()

格式:reduce_mean( input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None )

意义:计算张量各个维度上元素的平均值.

参数解析:input_tensor:要减少的张量.应该有数字类型.

                  axis:要减小的尺寸.如果为None(默认),则减少所有维度.必须在[-rank(input_tensor), rank(input_tensor))范围内.                            keep_dims:如果为true,则保留长度为1的缩小尺寸.

                  name:操作的名称(可选,也就是爱写不写).

                  reduction_indices:axis的不支持使用的名称.

实例:

4、tensorflow.equal()

格式:equal( x, y, name=None )

意义:返回(x == y)元素的真值

参数解析:

x:张量.必须half,float32,float64,uint8,int8,int16,int32,int64,complex64,quint8,qint8,qint32,string,bool,complex128等类型. 

y:张量.必须与 x 的类型一致.

name:操作的名称(可选,也就是爱写不写).

实例:

5、tensorflow.argmax()

格式:argmax(input, axis=None, name=None, dimension=None)

意义:返回张量沿轴最大值的索引,若最大值有重复,则返回第一个遇到的最大值的索引。

参数解析:

input:张量.必须half,float32,float64,uint8,int8,int16,int32,int64,complex64,quint8,qint8,qint32,string,bool,complex128等类型. 

aixs:尺寸,必须在[0, rank(input_tensor))内,类型为 int32, int64

name:操作的名称(可选,也就是爱写不写).

实例:

6、tensorflow.exp()

格式:exp(x,name=None )

意义:计算x元素的指数。(y = e ^ x )。

参数解析:x:A Tensor。必须是下列类型之一:half,float32,float64,complex64,complex128。

                  name:操作的名称(可选,也就是爱写不写)。

实例:

 

7、tensorflow.nn.softmax()

格式:tf.nn.softmax(logits, axis=None, name=None, dim=None )

意义:计算softmax激活,返回值为一个Tensor,与logits具有相同的类型和shape。

参数解析:logits:一个非空的Tensor。必须是下列类型之一:half, float32,float64。

                  axis:将在其上执行维度softmax。默认值为-1,表示最后一个维度。

                  name:操作的名称(可选,也就是爱写不写)。

                  dim:axis的已弃用的别名。

softmax解剖:

softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), axis)       #元素的指数/元素的指数和

实例:

上一篇:一个菜鸡的自强之路-线性函数实例剖析                    下一篇:一个菜鸡的自强之路-MNIST手写数字分类问题(进阶篇)

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐