机器学习入门——MINST


在进行机器学习时,一般学习的第一个项目就是手写MNIST识别学习。相当于Hello,Word,方便我们初步对机器学习有一个大概的概念。

什么是MNIST?

MNIST 是一个入门级计算机视觉数据集,包含了很多手写数字图片。如下图所示,为四张MNIST图片.
在这里插入图片描述
(MNIST资源很有网站都可以免费下载,如果实在找不到的可以联系我)

什么是TensorFlow?

TensorFlow是谷歌于2015年11月9日正式开源的计算框架。TensorFlow计算框架可以很好地支持深度学习的各种算法,但它的应用也不限于深度学习。

TensorFlow是由Jeff Dean领头的谷歌大脑团队基于谷歌内部第一代深度学习系统DistBelief改进而来的通用计算框架。DistBelief是谷歌2011年开发的内部深度学习工具,这个工具在谷歌内部已经获得了巨大的成功。
综上,TensorFlow就是深度学习工具。也就是流图从网络的一端流动到另一端的计算过程。

基本概念

TensorFlow中所有数据都是由张量的形式表示。
张量是什么?张量是一种组合数据类型,表示一个多维数组,通用表达形式为:[T1,T2,T3,…Tn],其中T可以是单个数字,也是是一个矩阵。
张量的维又叫张量的阶,是张量维数的一个数量描述。例:

1 #维度为0的张量
[1,2,3] #维度为1
[[1],[2]] #维度为2
[[1],[2],[3]] #维度为2
[[[1],[2]],[[3],[4]]] #维度为3

张量的形状,表达形式为[D0,D1,…Dn] D为任意正整数。例:
形状[3,4] 表示第一维有3个元素,第二维有4个元素。 [3,4]表示一个3行4列的矩阵
常量

def constant(value,dtype=None,shape=None,name=‘Const’,verify_shape=False)
value: 符合tf中定义的数据类型的常数值或者常数列表
dtype:数据类型,可选
shape:常量的形状,可选
name:常量的名字,可选
verify_shape:常量的形状是否可以被更改,默认不可更改
例:tensor_constant1 = tf.constant([1,2,3,4])

变量

TensorFlow中的变量特指深度学习机制中,控制输入到输出映射的可以变化的数据,
这些变化数据随着训练迭代的进行,不断地改变数值,不断优化,使输出的结果越来越接近于正确的结果。
例:初始化一个含有100个值为0的一维常量的变量:
w_c1 = Variable(tf.zeros([100]))

占位变量

def placeholder(dtype,shape=None,name=None)
dtype:表示tensorflow中的数据类型,如常用的tf.float32,tf.float64等数值类型
shape:表示数据类型,默认的None是一个一维的数值,shape=[None,5],表示行不定,列是5
name:张量名称
例:X = tf.placeholder(tf.float32,shape=[None,100*100])

常用函数

sess.run(tf.global_variables_initializer()) # 初始化所有变量
cross_entropy = -tf.reduce_sum(y_real * tf.log(y)) #计算交叉熵
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) # 梯度下降算法,目标优化交叉熵
y = tf.nn.softmax(tf.matmul(x, weights) + biases) #回归算法

(很多。。。)

代码部分:

// An highlighted block
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
# 设置权重weights和偏置biases作为优化变量,初始值设为0
weights = tf.Variable(tf.zeros([784, 10]))
biases = tf.Variable(tf.zeros([10]))
# 构建模型
x = tf.placeholder("float", [None, 784])
y = tf.nn.softmax(tf.matmul(x, weights) + biases)                    

y_real = tf.placeholder("float", [None, 10])                       
cross_entropy = -tf.reduce_sum(y_real * tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)       
init = tf.global_variables_initializer()
sess = tf.InteractiveSession()
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_real:batch_ys})                 
    if i % 100 == 0:
        correct_prediction = tf.equal(tf.argmax(y, 1), tf.arg_max(y_real, 1))      
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))            
        print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_real: mnist.test.labels}))

目的

今天是公司要求分享学习成果,就突发奇想的更新自己的第一篇博客,主要是希望可以跟其他学习的小伙伴一起分享,欢迎大家的指正错误的地方。有我能解答的地方,也一定会解答的。

猜你喜欢

转载自blog.csdn.net/qq_38953503/article/details/85320187