深度入门学习-tensorflow读取mnist

使用tensorflow读取mnist

import tensorflow as tf
import matplotlib.pyplot as plt

''' 读取MNIST数据方法一'''
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)
'''1)获得数据集的个数'''
train_nums = mnist.train.num_examples #训练集个数
validation_nums = mnist.validation.num_examples
test_nums = mnist.test.num_examples #测试集个数
print('MNIST数据集的个数')
print(' >>>train_nums=%d' % train_nums,'\n', #输出55000
      '>>>validation_nums=%d'% validation_nums,'\n',#输出5000
      '>>>test_nums=%d' % test_nums,'\n') #输出10000

'''2)获得数据值'''
train_data = mnist.train.images   #所有训练数据
val_data = mnist.validation.images  #(5000,784)
test_data = mnist.test.images       #(10000,784)
print('>>>训练集数据大小:',train_data.shape,'\n',
      '>>>一副图像的大小:',train_data[0].shape)
'''3)获取标签值label=[0,0,...,0,1],是一个1*10的向量'''
train_labels = mnist.train.labels     #(55000,10)
val_labels = mnist.validation.labels  #(5000,10)
test_labels = mnist.test.labels       #(10000,10)

print('>>>训练集标签数组大小:',train_labels.shape,'\n',
      '>>>一副图像的标签大小:',train_labels[1].shape,'\n',
      '>>>一副图像的标签值:',train_labels[0])

'''4)批量获取数据和标签【使用next_batch(batch_size)】'''
batch_size = 100    #每次批量训练100幅图像
batch_xs,batch_ys = mnist.train.next_batch(batch_size)
print('使用mnist.train.next_batch(batch_size)批量读取样本\n')
print('>>>批量读取100个样本:数据集大小=',batch_xs.shape,'\n',
      '>>>批量读取100个样本:标签集大小=',batch_ys.shape)
#xs是图像数据(100,784);ys是标签(100,10)

'''5)显示图像'''
plt.figure()
for i in range(100):
    im = train_data[i].reshape(28,28)
    im = batch_xs[i].reshape(28,28)
    plt.imshow(im,'gray') #plt.imshow()函数负责对图像进行处理,并显示其格式,但是不能显示。其后跟着plt.show()才能显示出来。
    #plt.imshow(some_digmit_image, cmap = matplotlib.cm.binary) cmap是图谱
    plt.pause(0.0000001) #设置图片显示的时长
plt.show()

next_batch()函数:

其中,mnist.train.next_batch() 函数包含一个参数 BATCH_SIZE,表示随即从训练集中抽取 BATCH_SIZE 个样本输入神经网络,并将样本的像素值和标签分别赋给 xs 和 ys。

在本例中,BATCH_SIZE 设置为200,表示一次将200个样本的像素值和标签分别赋值给 xs 和 ys ,故 xs 的形状为(200,784),对应的ys的形状为(200,10)。

基于批处理的代码实现

import numpy as np
x,t = get_data()
network = init_network

batch_size = 100
accuracy_cnt = 0

for i in range(0, len(x), batch_size)
    x_batch = x[i:i+batch_size]
    y_batch = predict(network, x_batch)
    p = np.argmax(y_batch, axis=1) #获取值最大的元素的索引 axis=1指定了在100*10的数组中,沿第一维的方向找到值最大啊元素的索引
    # 第0维对应第一个维度 矩阵的第0维是列方向 第1维是行方向
    accuracy_cnt += np.sum(p == t[i:i+batch_size])
    #本例是按x[0:100] x[100:200]这样提取

print("Accuracy" + str(float(accuracy_cnt) / len(x)))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qtayu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值