目录
dataset数据
在pytorch中如何读取数据主要有两类,一类是Dataset,另外一类是Dataloader,Dataset主要是提供一种方式去获取数据及其label,Dataloader为网络提供其不同的数据形式。
dataset:获取每一个数据和label
dataloader:提供不同的数据形式
下面为提供的数据集,然后分别打开jupyter和pycharm新建python项目
在jupyter键入如下,注意,在jupyter中使用help,可以得到排版很好的解释,在pycharm控制器中排版很混乱。
pycharm中加载数据集方法:新建工程-open in-exploar,然后将数据集复制在该工程下。
pycharm中使用 Ctrl+P 可以看函数需要传入什么参数。
使用控制台可以显示相关的属性,可以进行调试
读取图片
from PIL import Image
img_path = "dataset/train/bees_image/16838648_415acd9e3f.jpg"
上述地址在相对路径中,数据集已经加载到项目,python控制台实时创建了相应的变量,并显示了类型。显示为字符串类型。
如果要读取图片使用以下代码。
from PIL import Image
img_path = "dataset/train/bees_image/16838648_415acd9e3f.jpg"
img = Image.open(img_path)
并创建了img的变量,在里面会显示img的属性,比如size等。如果要显示图片
img.size
Out[6]: (500, 450)
img.show()
首先我们要获取图片的地址,如果说我们想要通过索引的方式进行获取,可以通过 OS(operating system)(python中常用的系统的库)通过相应的索引来获取。如果想要获取所有的文件
dir_path = "dataset/train/bees_image"
import os
img_path_list = os.listdir(dir_path)
我们可以看到第一个数组对应的第一个图片等,如果访问第一个图片的话,就可以输入以下代码
img_path_list[0]
Out[11]: '1092977343_cb42b38d62.jpg'
from torch.utils.data import Dataset
from PIL import Image
import os
class MyData(Dataset):
def __init__(self,root_dir,label_dir):
self.root_dir = root_dir #大目录
self.label_dir = label_dir #子目录
self.path = os.path.join(self.root_dir,self.label_dir) #拼接
self.img_path = os.listdir(self.path)
def __getitem__(self, idx):
img_name = self.img_path[idx]
img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)
img = Image.open(img_item_path)
label = self.label_dir
return img,label
def __len__(self):
return len(self.img_path)
展示图片
root_dir = "dataset/train"
ants_label_dir = "bees_image"
ants_dataset = MyData(root_dir,ants_label_dir)
img,label = ants_dataset[0] #展示第一张
img.show()
数据集的相加
root_dir = "dataset/train"
ants_label_dir = "ants_image"
bees_label_dir = "bees_image"
ants_dataset = MyData(root_dir,ants_label_