介绍
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
注:阿里云盘不能分享压缩包,没办法的啦!
注:里面只有图片,什么都没有
代码全程手撸,虽然也不知道转成图片有什么用吧,但是我就想看看图片。
希望大家一键三连,一起学习,一起进步。