测试环境

  • python2.7
  • JupyterLab
  • tensorflow1.4.0

Ipython文件下载地址,帮忙star一下

       Github地址

环境配置

!pip install tensorflow==1.4.0
!pip install scipy==1.2.1   #(不行就安装scipy1.0.0)否则报错(no modul named 'scipy')
!pip install Pillow   #否则报错('module' object has no attribute 'toimage')
!pip install numpy

理论依据

1.MNIST数据集介绍

  • MNIST数据集主要由一-些手写数字的图片和相应的标签组成,图片一共有10类,分别对应从0~9,共10个阿拉伯数字。
  • 原始的MNIST数据库一共包含下面4个文件

|文件名|大小|用途|
|-|-|-|
|train-images-idx3-ubyte.gz|9.45M|训练图像数据|
|train-labels-idx1-ubyte.gz|0.03M|训练图像的标签|
|t10k-images-idx3-ubyte.gz|1.57M|测试图像数据|
|t10k-labels-idx1-ubyte.gz |4.4K|测试图像的标签|

  • 图像数据:是指很多张手写字符的图像
  • 图像标签:是指每张图像实际对应的数字是几,也就是说在MNIST数据集中的每一张图像都事先标明了对应的数字

数据集样式

2.下载MNIST数据集,并打印一些基本信息

1.在执行语句mnist = input data.read data_sets("MNIST data/",one_hot=-True)时,
2.TensorFlow会检测数据是否存在。当数据不存在时,系统会自动将数据下载到MNIST _data/文件夹中。
3.当执行完语句后,读者可以自行前往MNIST _data/文件夹下查看上述4个文件是否已经被正确地下载。
4.下载数据集之后,我们利用一下属性访问数据集,变量mnist.train.images和mnist.rain.labels、后四个mnist.validation.images 、mnist,validation.labels 、mnist.testimages 、mnistest.labels四个变量与它们非常类似,唯一的区别只是图像的个数不同,

|属性名|内容|
|-|-|
|mnist.train.images|训练图像|
|mnist.rain.labels|训练标签|
|mnist.validation.images|验证图像|
|mnist,validation.labels|验证标签|
|mnist.testimages|测试图像|
|mnistest.labels|测试标签|

# 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, :])
# 打印成功信息
print("数据集下载成功!")

原始的MNIST数据集中包含了60000张训练图片和10000张测试图片。而在TensorFlow中,又将原先的60000张训练图片重新划分成了新的55000张训练图片和5000张验证图片。所以在mnist对象中,数据一共分为三部分:mnist.train是训练图片数据,mnist.validation 是验证图片数据,mnist.test是测试图片数据,这正好对应了机器学习中的训练集、验证集和测试集。一般来说,会在训练集上训练模型,通过模型在验证集上的表现调整参数,最后通过测试集确定模型的性能。

3.将MNIST数据集保存为图片

  在原始的MNIST数据集中,每张图片都由一个28x28的矩阵表示,在TensorFlow中,变量mnist.train.images是训练样本,它的形状为(55000,784)。其中,5000是训练图像的个数,而784实际为单个样本的维数,即每张图片都由一个784维的向量表示( 784正好等于28x28 )。为了加深对这种表示的理解,下面完成一个简单的程序:将MNIST数据集读取出来,并保存为图片文件。
#coding: utf-8
from tensorflow.examples.tutorials.mnist import input_data
import scipy.misc
import os

# 读取MNIST数据集。如果不存在会事先下载。
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 我们把原始图片保存在MNIST_data/raw/文件夹下
# 如果没有这个文件夹会自动创建
save_dir = 'MNIST_data/raw/'
if os.path.exists(save_dir) is False:
os.makedirs(save_dir)

# 保存前20张图片
for i in range(20):
    # 请注意,mnist.train.images[i, :]就表示第i张图片(序号从0开始)
    image_array = mnist.train.images[i, :]
    # TensorFlow中的MNIST图片是一个784维的向量,我们重新把它还原为28x28维的图像。
    image_array = image_array.reshape(28, 28)
    # 保存文件的格式为 mnist_train_0.jpg, mnist_train_1.jpg, ... ,mnist_train_19.jpg
    filename = save_dir + 'mnist_train_%d.jpg' % i
    # 将image_array保存为图片
    # 先用scipy.misc.toimage转换为图像,再调用save直接保存。
    scipy.misc.toimage(image_array, cmin=0.0, cmax=1.0).save(filename)

print('Please check: %s ' % save_dir)
运行此程序后,在MNIST_ data/raw/文件夹 下就可以看到MNIST数据集中训练集的前20张图片。可以修改.上述程序打印更多的图片

4.图像标签的独热表示,打印MNIST数据集中图片的标签

#打印出第0张训练图片的标签
# coding: utf-8
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
# 读取mnist数据集。如果不存在会事先下载。
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print (mnist. train.labels[0, :])
代码运行的结果是[0.0. 0. 0. 0. 0. 0.1. 0. 0.], 也就是说第0张图片对应的标签为数字“7”

|原始表示(0~9)|独热表示(10维向量)|
|-|-|
|1|(1,0,0,0,0,0,0,0,0,0)|
|1|(0,1,0,0,0,0,0,0,0,0)|
|3|(0,0,1,0,0,0,0,0,0,0)|
|......|......|
|9|(0,0,0,0,0,0,0,0,0,1)|

【腾讯云】星星海SA2云服务器618钜惠,1核2G 首年95元【点击查看】。


文章: 《MNIST机器学习入门》
联系方式:
文章链接:https://wxiou.cn/index.php/archives/10/
除特别注明外,文章均为Literature原创,转载时请注明本文出处及文章链接
Last modification:July 24th, 2020 at 05:14 pm
如果觉得我的文章对你有用,请随意赞赏