MNIST数据集
作为神经网络和深度学习工具书和初学者首个经常接触和使用的“典型”数据集,是“知名”的手写数字数据集,本身占用空间不大(总共不到20MB),但是内容较多,且已经做好了分类。
MNIST数据集的获取
具体可参考本站另一位博主文章里提供的脚本:
注:需要使用其提供的 mnist.py 作为依赖。
MNIST数据集的内容
下载下来是这样的:
简单解释一下:
- train-images-idx3-ubyte.gz (9.9 MB,训练集图像,包含 60,000 个样本)
- train-labels-idx1-ubyte.gz (29 KB, 训练集标签,包含 60,000 个标签)
- t10k-images-idx3-ubyte.gz (1.6 MB,测试集样本,包含 10,000 个样本)
- t10k-labels-idx1-ubyte.gz (5KB, 测试集标签,包含 10,000 个标签)
封装后是这样的:
随便解压一个内容是这样的:
idx3-ubyte格式,具体解释数据集的提供网站有介绍
总之,依靠普通常规手段是看不到图像内容的。
图像可视化
只看一点点
用这个脚本可以查看数据集的其中一个图像(来自博客):
链接: 查看MNIST的图像内容
代码如下:
import numpy as np
#下面这个引用就是上面文章提供的脚本mnist.py
from mnist import load_mnist
from PIL import Image
def img_show(img):
pil_img = Image.fromarray(np.uint8(img))
pil_img.show()
(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True,
normalize=False)
img = x_train[0]
label = t_train[0]
print(label) # 5
#这里是把二维图像铺平成一维存放了
print(img.shape) # (784,1)
img = img.reshape(28, 28) # 还原为二维
print(img.shape) # (28, 28)
img_show(img)
图像是28*28的灰度图,也就是单通道图像。
多看一点点
才一张根?本不够嘛!哪咱们来100张的!
import numpy as np
from mnist import load_mnist
from PIL import Image
a = 10
(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)
im = Image.new('L', (28 * a, 28 * a)) # 生成一个大的纯黑灰度图作为容器 长*宽
labels = []
images = []
for i in range(100): # 从0开始 取100个整数
img = x_train[i]
label = t_train[i]
img = img.reshape(28, 28)
pil_img = Image.fromarray(np.uint8(img)) # 数据格式转换为8位
labels.append(label)
images.append(pil_img)
#在大的纯黑图灰度图上放单张图 10*10 共100张 得到100个数字的单张图
for k in range(10, 110, 10):
for j in range(10000):
if j < 10:
print(k/10)
im.paste(images[j], (j * 28, 28 * (int(k / 10) - 1)))
elif j < k:
im.paste(images[j], ((j - k + 10) * 28, 28 * (int(k / 10) - 1)))
im.show() #显示图像
print(labels)
结果图:
再多看亿点点?
行,来点猛的!10000张够吗?
10改成100,100改10000即可,再加一些小改动:
a = 100
for i in range(10000): # 从0开始 取10000个整数
for k in range(100, 10100, 100):
for j in range(10000):
if j < 100:
print(k/100)
im.paste(images[j], (j * 28, 28 * (int(k / 100) - 1)))
elif j < k:
im.paste(images[j], ((j - k + 100) * 28, 28 * (int(k / 100) - 1)))
大功告成!还挺有意思不是吗?