Tensorflow学习笔记:基础(01)-Mnist手写集最原始版

# 本篇主要用来认识Tensorflow实现神经网络的一般流程,最简单最原始的实现方法,不关注具体提升错误率技巧。

## Mnist数据集是![Yann LeCun](http://yann.lecun.com/exdb/mnist/)所提供的一个手写数据集。

 

## 安装数据集

可以下载到本地,也可以用Google的![Colaboratory](https://colab.research.google.com),Colaboratory 是免费的 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。推荐使用它,记得搭梯子。

两行代码安装:

import  tensorflow.examples.tutorials.mnist.input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

这个数据集中,总共有6w行训练数据集,1w行测试数据集,每张图片都是28*28的像素点矩阵。把这个二维矩阵展开成一维向量,长度是28*28=784.

在MNIST训练数据集里,训练集图片(mnist.train.images)是一个形状为[60000,784]的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值介于0和1之间。 

## 分类器使用softmax,具体原理见。。。

然后来实现一个最简单的两层全连接网络来完成MNIST数据的分类问题,输入层784个神经元,对应每张图片784个像素点;输出层十个神经元,对应0-9这10个数字,实现分类。

 

## 计算流程

1. 数据准备

2. 准备好placeholder

3. 初始化参数/权重

4. 计算预测结果

5. 计算损失值

6. 初始化优化器optimizer

7. 指定迭代次数,在session执行graph

 

## 代码

1. 准备数据

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

# 载入数据集
mnist = input_data.read_data_sets("MNIST_data", one_hot=True)

# 每个批次送100张图片
batch_size = 100
# 计算一共有多少个批次
n_batch = mnist.train.num_examples / batch_size

2. 准备好placeholder

x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10])

3. 初始化参数、权重

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

4. 计算预测结果

prediction = tf.nn.softmax(tf.matmul(x, W) + b)

5. 计算损失值

loss = tf.reduce_mean(tf.square(y - prediction))

6. 初始化优化器optimizer

learning_rate = 0.2
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

# 计算结果存在boolean list,argmax()函数返回一维张量中最大值所在的位置
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))

# 计算准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

7. 指定迭代次数

n_sample = xs.shape[0]
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for epoch in range(21):
        for batch in range(n_batch):
            batch_xs, batch_ys = mnist.train.next_batch(batch_size)
            sess.run(optimizer, feed_dict={x: batch_xs, y:batch_ys})
        
        acc = sess.run(accuracy, feed_dict={x:mnist.test.images, y:mnist.test.label})
        if epoch % 2 == 0:
            print('Iter ' + str(epoch) + ',Testing Accuracy ' + str(acc))

一些可以优化的方向:

1. 增加神经网络层数,添加隐层;

2. 将二次代价函数修改成交叉熵函数呢?

3. 尝试多选几个梯度下降优化器呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值