pytorch深度神经元网络新手入门提前准备自己拍的照片数据信息
本文关键给大家介绍了pytorch深度神经元网络新手入门提前准备自己拍的照片数据信息实例全过程,感兴趣的小伙伴可以参考借鉴一下,希望可以可以参考,祝愿大家多多的发展,尽早涨薪 文章正文 图片数据主要有两种状况: 1、全部图片放到一个文件夹内,此外有个txt文件表明标识。 2、不一样类型照片放到不同类型的文件夹内,文件夹
来源: https://www.ucloud.cn/yun/128738.html 作者: 89542767 发布日期: 发布于2022-12-23 15:46
本文关键给大家介绍了pytorch深度神经元网络新手入门提前准备自己拍的照片数据信息实例全过程,感兴趣的小伙伴可以参考借鉴一下,希望可以可以参考,祝愿大家多多的发展,尽早涨薪
文章正文
图片数据主要有两种状况:
1、全部图片放到一个文件夹内,此外有个txt文件表明标识。
2、不一样类型照片放到不同类型的文件夹内,文件夹便是图形的类型。
对于这两个不同的状况,数据的准备工作也有所不同,第一类状况能够定制1个Dataset,第二类状况立即调用torchvision.datasets.ImageFolder去处理。下边各自做出说明:
一、全部图片放到一个文件夹内
这儿以mnist数据的10000个test为例子,我就把test集的10000个图片保存出去,并生着相对应的txt标签文档。

先往文件列表构建一个空文件夹mnist_test,用以储存10000张照片,然后运行代码:
import torch
import torchvision
import matplotlib.pyplot as plt
from skimage import io
mnist_test=torchvision.datasets.MNIST(
'./mnist',train=False,download=True
)
print('test set:',len(mnist_test))
f=open('mnist_test.txt','w')
for i,(img,label)in enumerate(mnist_test):
img_path="./mnist_test/"+str(i)+".jpg"
io.imsave(img_path,img)
f.write(img_path+''+str(label)+'n')
f.close()
经过上面的操作,10000张图片就保存在mnist_test文件夹里了,并在当前目录下生成了一个mnist_test.txt的文件,大致如下:
前期工作就装备好了,接着就进入正题了:
from torchvision import transforms,utils
from torch.utils.data import Dataset,DataLoader
import matplotlib.pyplot as plt
from PIL import Image
def default_loader(path):
return Image.open(path).convert('RGB')
class MyDataset(Dataset):
def __init__(self,txt,transform=None,target_transform=None,loader=default_loader):
fh=open(txt,'r')
imgs=[]
for line in fh:
line=line.strip('n')
line=line.rstrip()
words=line.split()
imgs.append((words[0],int(words[1])))
self.imgs=imgs
self.transform=transform
self.target_transform=target_transform
self.loader=loader
def __getitem__(self,index):
fn,label=self.imgs[index]
img=self.loader(fn)
if self.transform is not None:
img=self.transform(img)
return img,label
def __len__(self):
return len(self.imgs)
train_data=MyDataset(txt='mnist_test.txt',transform=transforms.ToTensor())
data_loader=DataLoader(train_data,batch_size=100,shuffle=True)
print(len(data_loader))
def show_batch(imgs):
grid=utils.make_grid(imgs)
plt.imshow(grid.numpy().transpose((1,2,0)))
plt.title('Batch from dataloader')
for i,(batch_x,batch_y)in enumerate(data_loader):
if(i<4):
print(i,batch_x.size(),batch_y.size())
show_batch(batch_x)
plt.axis('off')
plt.show()
自定义了一个MyDataset,继承自torch.utils.data.Dataset。然后利用torch.utils.data.DataLoader将整个数据集分成多个批次。
二、不同类别的图片放在不同的文件夹内
同样先准备数据,这里以flowers数据集为例
提取链接:https://pan.baidu.com/s/1dcAsOOZpUfWNYR77JGXPHA?pwd=mwg6
花总共有五类,分别放在5个文件夹下。大致如下图:

我的路径是d:/flowers/.
数据准备好了,就开始准备Dataset吧,这里直接调用torchvision里面的ImageFolder
import torch
import torchvision
from torchvision import transforms,utils
import matplotlib.pyplot as plt
img_data=torchvision.datasets.ImageFolder('D:/bnu/database/flower',
transform=transforms.Compose([
transforms.Scale(256),
transforms.CenterCrop(224),
transforms.ToTensor()])
)
print(len(img_data))
data_loader=torch.utils.data.DataLoader(img_data,batch_size=20,shuffle=True)
print(len(data_loader))
def show_batch(imgs):
grid=utils.make_grid(imgs,nrow=5)
plt.imshow(grid.numpy().transpose((1,2,0)))
plt.title('Batch from dataloader')
for i,(batch_x,batch_y)in enumerate(data_loader):
if(i<4):
print(i,batch_x.size(),batch_y.size())
show_batch(batch_x)
plt.axis('off')
plt.show()
综上所述,这篇文章就给大家介绍完毕了,希望可以给大家带来帮助。