网站加视频,网站查询页面设计,app开发大概费用多少钱,网站建设费汇算清缴在编写代码训练神经网络之前#xff0c;导入数据是必不可少的。PyTorch提供了许多预加载的数据集#xff08;如FashionMNIST#xff09;#xff0c;这些数据集 子类并实现特定于特定数据的函数。
它们可用于对模型进行原型设计和基准测试#xff0c;加载这些数据集是十分…在编写代码训练神经网络之前导入数据是必不可少的。PyTorch提供了许多预加载的数据集如FashionMNIST这些数据集 子类并实现特定于特定数据的函数。
它们可用于对模型进行原型设计和基准测试加载这些数据集是十分简单的。好吧那如何加载自己制作的数据集呢
简单来讲自定义数据集类必须实现三个函数__init__、__len__和__getitem__。下面代码就实现了一个Dataset
import osimport torchfrom torch.utils.data import Datasetfrom torchvision import transformsfrom PIL import Imageimport numpy as npclass MyDataset(Dataset): def __init__(self, path_file,transformNone,label_transformNone): self.path_filepath_file self.imgs[name for name in os.listdir(path_file)]#获取path_file路径下所有文件名 self.transform transform self.label_transform label_transform def __len__(self): return len(self.imgs) def __getitem__(self, idx): #get the image img_path os.path.join(self.path_file,self.imgs[idx])#获得图片完整路径 imageImage.open(img_path) imageimage.resize((28,28))#修改图片为默认大小 image np.array(image) imagetorch.from_numpy(image)#将numpy数组转换为张量 imageimage.permute(2,0,1)#将HWC转换为CHW if self.transform: image self.transform(image) #get the label str1self.imgs[idx].split(.) labeltorch.tensor(eval(str1[1])) if self.label_transform: labelself.label_transform(label) return image, label
注上述代码从路径path_file读取文件准确来讲应该是我们准备的训练图片格式如下 cat1.0.jpg cat2.0.jpg ... dog1.1.jpg dog2.1.jpg ...
图片名重要含义类别01等
而cat1,dog1这些并不重要因为01已经反映了图片的类别这里仅仅是一个习惯同样jpg也是如此。
实际上在我们准备图片时图片名往往不是这样但直接写个简单的文件处理程序便很容易转变为上述格式。
之所以这样命名就是为容易获得图片和对应的类别也就是实现自己的Dataset。当然其它还有许多方法但核心就是加载自己的数据时获得图片和对应的类别。 再次看一下实现自己的Dataset的架构
class CustomImageDataset(Dataset): def __init__(self, path_file, transformNone, target_transformNone): ... ... ... def __len__(self): return len(...) def __getitem__(self, idx): ... ... ... if self.transform: image self.transform(image) if self.label_transform: label self.label_transform(label) return image, label 在训练模型时我们通常希望 在“小批量”中传递样本在每个时期重新洗牌数据以减少模型过度拟合并使用 Python 的 加快数据检索速度。
DataLoader是一个迭代对象它在一个简单的 API 中为我们抽象了这种复杂性。下面我们将Dataset带入DataLoader.
pathE:\\3-10\\dogandcats\\train#图片所在目录training_dataMyDataset(path)train_dataloader torch.utils.data.DataLoader(training_data, batch_size2, shuffleTrue)
让我们run一下 trainimg,labelnext(iter(train_dataloader)) trainimg.size()torch.Size([2, 3, 28, 28]) label.size()torch.Size([2]) 结果符合预期与在使用pytorch预加载的数据集格式一样 点点点赞和在看都在这儿