深度入门学习-tensorflow读取mnist

    科技2022-07-10  299

    使用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)))
    Processed: 0.014, SQL: 8