查看MNIST数据集中的图片
介绍
MNIST是一个手写数字的数据集,对里面的数据进行了分类处理,将每一张图片放到自己对应的文件夹下。这里只使用了训练集,要看测试集的可以自行查看。
下载mnist数据集
通过pytorch下载数据集,保存在当前目录下的root文件夹下。
import torchvision dataset = torchvision.datasets.MNIST("./root", train=True, transform=torchvision.transforms.ToTensor(), download=True)
转换数据类型
下载下来的数据维度是:torch.Size([1, 28, 28]),然后读取出来一个数据,将其转换成np类型的格式。
first = dataset[0][0] a = np.array(first) print(type(a))
a就是np类型的了,准确的说是<class numpy.ndarray>。
加载图片
def img_show(img): pil_img = Image.fromarray(np.uint8(img)) pil_img.show() img_show(a)
一张图片就显示出来了。
整体代码如下:
import torchvision.datasets.mnist as mnist from PIL import Image def img_show(img): pil_img = Image.fromarray(np.uint8(img)) pil_img.show() data = mnist.read_image_file("./root/MNIST/raw/train-images-idx3-ubyte") print(data.shape) img = data[0] a = np.array(img) print(type(a)) img_show(a)
注:也可以用transform进行转换
在取到数据后,用transform转换成PIL格式的数据,也可以进行显示。
我在进行拼接图片的时候,显示的图片是拉伸过的,可能是转换用的reshape函数不对。
下面是全部转换的代码
import numpy as np import torch import torchvision from PIL import Image from torch.utils.data import DataLoader import os dataset = torchvision.datasets.MNIST("./root",train=True,transform=torchvision.transforms.ToTensor(), download=True) loader = DataLoader(dataset,batch_size=1,shuffle=False,drop_last=False) piltrans = torchvision.transforms.ToPILImage() def img_show(img): pil_img = Image.fromarray(np.uint8(img)) pil_img.show() # 建立文件夹 def mkdir(): num = 10 for i in range(num): dir = "./root/MNIST/img/{}".format(num) if not os.path.exists(dir): os.makedirs(dir) mkdir() list = [1 for i in range(10)] for img,label in loader: # print(img) num = int(label[0]) print(num) print(type(img),img.shape) print(type(label),label.shape) img = torch.reshape(img,(1,28,28)) image = piltrans(img) # image.show() dir = "./root/MNIST/img/{}".format(num) if not os.path.exists(dir): os.mkdir(dir) Image.Image.save(image,dir+r"/"+str(list[num])+r".jpg") list[num] += 1
我在第一次运行的时候,不知道为什么建立了一个名为10的文件夹,还报错了,而且其余数字有的没有建立,第二次运行就没问题了,文件夹全部建立成功。
下面是运行成功的图片
下面是百度网盘的链接:
有用者自取:
链接:https://pan.baidu.com/s/12gnmfnSzUDKgUc7Z-IwxSg?pwd=1234 提取码:1234
注:阿里云盘不能分享压缩包,没办法的啦!
注:里面只有图片,什么都没有
代码全程手撸,虽然也不知道转成图片有什么用吧,但是我就想看看图片。