Dataset实际应用个人总结
读取数据
import os
dir_path = "dataset/train/ants"
img_path_list = os.listdir(dir_path) # 将文件夹下的东西变成一个列表
拼接路径
import os
root_dir = "dataset/train"
label_dir = "ants"
path = os.path.join(root_dir, label_dir) # 把两个路径拼接在一起
单独用数据集的时候,实际例子如下
from torch.utils.data import Dataset
from PIL import Image #读取图片
import os #想要获得所有图片的地址,需要导入os(系统库)
class MyDate(Dataset):
def __init__(self,root_dir,label_dir): #创建初始化类,即根据这个类去创建一个实例时需要运行的函数
#通过索引获取图片的地址,需要先创建图片地址的list
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)
#self可以将变量设置为全局变量,即其他函数也可以使用
def __getitem__(self, idx): #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_lavbel_dir = "ants"
ants_dataset = MyDate(root_dir,ants_lavbel_dir)
合并两个数据集之后的代码
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_lavbel_dir = "ants"
bees_label_dir="bees"
ants_dataset = MyData(root_dir,ants_lavbel_dir)
bees_dataset = MyData(root_dir,bees_label_dir)
train_dataset=ants_dataset+bees_dataset
img,label = train_dataset[124] #获取编号为124的图片
img.show #获得图片的属性
img.shou() #展现出图片
给数据集做成原图片和分类文本分开的形式
import os
root_dir=r"E:\pythonproject\ceshi\dataset\train"
# 把原来的ants重命名为ants_image
target_dir="ants_image"
img_path=os.listdir(os.path.join(root_dir,target_dir))
label=target_dir.split('_')[0] # ants
out_dir="ants_label"
for i in img_path:
file_name=i.split('.jpg')[0]
with open(os.path.join(root_dir,out_dir,"{}.txt".format(file_name)),'w') as f:
f.write(label)
以上均为个人学习总结,仅供参考使用,学习资料为 link