认识Dataset
Dataset就相当于在一堆杂乱无章的数据中,挑选出需要的数据出来,并且给这些数据进行编码与排列,提供一种方式去获取数据及其label,方便后续的数据处理,就像上图一样。而Dataloader就相当于对处理好的数据进行一个装包,从而为后面的网络提供不同的数据形式。
- 右键文件夹,选择Open In Explorer加载图片文件源。
- 将图片源文件夹粘贴在上个步骤打开的文件夹当中。完成步骤即可关闭文件夹,然后看到pycharm文件中出现了新的文件源。
- 对加载好的文件图片按键盘上的 Ctrl+Shift +C 复制路径,即可直接粘贴。
- 注意粘贴路径的时候,如果是windows系统,那么要在路径上打上两个//表示路径转义才能够识别出来。
以下的代码在pycharm控制台中输入,因为pycharm控制台可以即时看到相关内容,从而方便代码纠错。
- 打开图片:
img = Image.open(img_path)
- 展示图片尺寸:
img.size
- 显示图片:
img.show()
- 通过右键复制可以得到数据集的相对路径:
- 将文件的所有东西变成一个列表:
img_path_list = os.listdir(dir.path)
- 展示第一个图片的名称:
img_path_list[0]
具体代码展示与解析:
import os.path
from torch.utils.data import Dataset
from PIL import Image
class MyData(Dataset):
#self 是封装函数自带的
def __init__(self,root_dir,label_dir):
#把对应的值赋给函数内部
#能够成为我们类当中的存储变量
self.root_dir = root_dir
self.label_dir = label_dir
#通过join将目录整合在一起
self.path = os.path.join(self.root_dir,self.label_dir)
#指定目录下的所有文件和目录的列表,并将这个列表赋值给 `self.img_path` 属性。
self.img_path = os.listdir(self.path)
#读取其中的每一个图片
def __getitem__(self, idx):
#idx是作为一个编号
#把idx检索值赋给img_name
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_dir
label = self.label_dir
return img,label
def __len__(self):
#返回该文件的长度
return len(self.img_path)
root_dir = "dataset/train"
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir,bees_label_dir)