深度学习数据集 2 MNIST数据集

安装使得python可视化的工具

  matplotlib

  直接在TensorFlow的虚拟环境下pip install matplotlib完事。

  有了前面的经验这次直接简单完成。

 

  

 

读取MNIST数据集

  mnist数据集在TensorFlow当中是有自己的api的。

 

这段代码直接运行看看效果,api好多,要了解有点烦,不看了

  https://blog.csdn.net/qq_38204686/article/details/105658262?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242

import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data
import matplotlib.pyplot as plt
import numpy as np
 
#0 读取mnist数据集
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
 
#1 读取训练集的一张图片与标签
batch_xs, batch_ys = mnist.train.next_batch(1)
img = tf.reshape(batch_xs,[28,28])
label = tf.argmax(batch_ys,1)
 
#2 读取测试集的一张图片与标签
img_tt = mnist.test.images[0]
img_t = tf.reshape(img_tt,[28,28])
label_tt = mnist.test.labels[0]
label_tt = np.reshape(label_tt,[1,10])
label_t = tf.argmax(label_tt,1)
 
with tf.Session() as sess:
    # 训练集 打印标签 像素值 
    print("训练集:%d"%sess.run(label))
    im = sess.run(img) 
    for i in range(28):
        for j in range(28):
            print("%d "%round(im[i][j]),end='')
        print()    
    
    #测试集 打印标签 像素值 
    print("测试集:%d"%sess.run(label_t))
    im_t = sess.run(img_t) 
    for i in range(28):
        for j in range(28):
            print("%d "%round(im_t[i][j]),end='')
        print()
        
    #显示图片
    plt.figure()
    plt.subplot(121)
    plt.imshow(im,cmap = 'gray')
    plt.subplot(122)
    plt.imshow(im_t,cmap = 'gray')    
    plt.show()

 

另外一种操作方式

https://blog.csdn.net/sinat_26472165/article/details/86006473

import cv2 as cv
import struct
import numpy as np
 
num = 10000
f = open('train-images.idx3-ubyte','rb')
image = np.zeros((28,28))
f.read(16)
 
for picNum in range(num):
    path = str(picNum)+'.jpg'
    for x in range(28):
        for y in range(28):
            image[x][y] = struct.unpack('B',f.read(1))[0]
    cv.imwrite(path,image)
 
f.close()

 

  可以看到这种方法更加贴近本质。

  1.把数据图像文件打开之后,丢弃了前16个字节的无效数据。

   这里的read可以学一学

 

  2.图片的像素是28X28的,然后一个np数组就可以储存一张图片,np数组的每一个元素表示了

一个像素格点的灰度值。https://blog.csdn.net/lidichengfo0412/article/details/102516053?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

  这篇博客对cv作了详细的说明。

  如果image_file文件是黑白图像,那维度是(w, h, 1),如果是彩色图像,那维度是(w, h, 3)

  显然这里可能黑白就省略了。彩色的话,那就是每个像素格点有RGB三原色的说明。

 

  3.设置输出路径很关键。struct据说是要将2进制数转化为10进制数。

 

  4.使用cv2实现图片与numpy数组的相互转化

  https://blog.csdn.net/lidichengfo0412/article/details/102516053?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

 

 

  最后就生成了许多的照片。

 

posted @ 2021-09-21 19:21  TheDa  阅读(87)  评论(0编辑  收藏  举报