Tensorflow十个实践项目--手写数字识别

可能很多萌新还是期待有一些详细的入门的小项目的教程,因此此次我们来介绍一个机器学习中最基本的项目,手写数字识别。

首先明确一下我们要做什么,听名字就知道,我们是要根据手写数字的图片,推断出所要表达的数字。

那么我们期待数字是什么样子的格式?

图片的话,自然而然就是一个 n*width*height*channels 的矩阵。标签可以是0,1,2等等一直到9。这些都没有任何问题。但是其实应对这种分类问题,我们可以将标签,通常也会将标签处理成one-hot形式。

那什么是one-hot?

实际上就是一种文本符号化的方式,比如这里我们有一张图片的标签是5. 那么符号化后的表示形式就是 0000010000。没错,对应位置是1,其余是0,这就是one-hot。

了解了这些之后,我们先来准备一下数据。因为这个项目实在是太具有教学意义了,所以Tensorflow已经给我们准备好了MNIST的有关数据并且给我们封装好了一些常用的操作。

# coding:utf-8
# 从tensorflow.examples.tutorials.mnist引入模块。这是TensorFlow为了教学MNIST而提前编制的程序
from tensorflow.examples.tutorials.mnist import input_data
# 从MNIST_data/中读取MNIST数据。这条语句在数据不存在时,会自动执行下载
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 查看训练数据的大小
print(mnist.train.images.shape)  # (55000, 784)
print(mnist.train.labels.shape)  # (55000, 10)

# 查看验证数据的大小
print(mnist.validation.images.shape)  # (5000, 784)
print(mnist.validation.labels.shape)  # (5000, 10)

# 查看测试数据的大小
print(mnist.test.images.shape)  # (10000, 784)
print(mnist.test.labels.shape)  # (10000, 10)

# 打印出第0幅图片的向量表示
print(mnist.train.images[0, :])

# 打印出第0幅图片的标签
print(mnist.train.labels[0, :])

可能有人会问,为什么有了测试集还需要验证集呢?

其实通常的做法是,在训练集上训练模型,然后通过模型在验证集上的表现调整参数,最后通过测试集确定模型的性能。

那为什么这里训练数据的大小是55000*784呢?

55000就是图片的数目,784是单个样本的大小,我们的手写数字识别的图片是28*28的灰度图,所以可以用1*784的向量来表示。

那我们应该怎么样还原这个向量得到一张完整的图片呢?其实我觉得这只是一个向量操作问题,代码如下:

#coding: utf-8
from tensorflow.examples.tutorials.mnist import input_data
import scipy.misc
import os

# 读取MNIST数据集。如果不存在会事先下载。
mnist = input_data.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值