深度学习数据集 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
最后就生成了许多的照片。