MNIST

前言

一般机器学习框架都使用MNIST作为入门。就像"Hello World"对于任何一门编程语言一样,要想入门机器学习,就先要掌握MNIST。

笔者在学习的时候Tensorflow已经成为十分流行的机器学习框架,网上有大量的“资源”,但是大多都限于皮毛。
很多教程就是给你一段代码然后随便讲两句,这样对新手并不友好。
因此我萌生了写一个详解的想法。
笔者是一名网络工程在读大学生,知识水平有限,未必能做到面面俱到且处处正确,如有错误请指出。

源代码

  • 训练集
    请点击此处下载。
    提取码:xgpy
  • 源代码
    在源代码同一目录下新建文件夹“训练集”,把百度云连接里面的.gz文件放入该文件夹。
# -*- coding: utf-8 -*-
import tensorflow as tf
import input_data
mnist = input_data.read_data_sets('./训练集', one_hot=True)


'''
    #构建运算图
'''
# X Y 都是占位符 占位而已 不表示具体的数据 
x = tf.placeholder("float",[None,784]) # 图像的大小为784;None表示第一个维度可以是任意长度

# 一个Variable代表一个可修改的张量,它们可以用于计算输入值,也可以在计算中被修改
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))

# 梯度下降算法(gradient descent algorithm)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

# 在运行计算之前,我们需要添加一个操作来初始化我们创建的变量:
init = tf.global_variables_initializer()

# 在一个Session里面启动我们的模型,并且初始化变量:
sess = tf.Session()
sess.run(init)

# 训练模型1000次
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})



correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))  
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
#print('-**-',accuracy,type(accuracy))

print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

详解

这一大段代码实现的功能是:
建立 y = w*x+b 的模型,其中x是输入的
可以直观的看到,以上代码分为三部分:构建图、定义会话、启动图。

构建图

构建图也分为定义变量、定义交叉熵、定义优化方法。

  • 定义变量
    由定义方法分类,本实例中主要有两种变量。
    第一类是由tf.Variable()定义的w、b
    第二类是由tf.placeholder()定义的y_、x
    顺带提一句y = tf.nn.softmax(tf.matmul(x,W) + b)是这两者结合起来的。
    那么这两类有什么区别呢?
    一般而言,Varibale主要用来保存tensorflow图中的一些结构中的参数,如本例中的w权重,b偏置。需要初始化。
    plceholder主要用来把要训练/测试的数据输入模型,每次训练plceholder都有不一样的值。在Session.run(feed_dict={})中的参数确定实际的值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值