使用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)))