网站建设现况分析,外贸原单,具有营销型网站有哪些,y3微信管理系统解决任何真实问题的重要一步是获取数据#xff0c;Kaggle提供了大量不同数据科学问题的竞赛。 我们将从
https://www.kaggle.com/competitions/dogs-vs-cats/data
下载猫狗数据集#xff0c;并对其进行一定的操作#xff0c;以正确的导入到我们的计算机#xff0c;为接下…解决任何真实问题的重要一步是获取数据Kaggle提供了大量不同数据科学问题的竞赛。 我们将从
https://www.kaggle.com/competitions/dogs-vs-cats/data
下载猫狗数据集并对其进行一定的操作以正确的导入到我们的计算机为接下来的模型训练做准备。
数据集带有标号的包含25000张图片猫狗各一半图片格式如下
类别.序号.jpg比如 cat.1.jpgcat.2.jpg,cat.3.jpg,....cat.12449.jpg dog.1.jpg,dog.2.jpg,dog.3.jpg,.....dog.12499.jpg
共计25000张。 直接将其导入计算机显然是不行的我们必须对图片名进行处理接着构建自己的Dataset类。
首先对图片名进行处理
import ospathE:\\3-10\\source\\train\\filenames[name for name in os.listdir(path)]j0k0catList[]dogList[]for i,filename in enumerate(filenames): srcpathfilename namelistfilename.split(.) if namelist[0]cat: jj1 dstnamelist[0]str(j).0.namelist[2] #猫标签设置为0 catList.append(dst)#获得cat的图片名集合 else: kk1 dstnamelist[0]str(k).1.namelist[2] #狗标签设置为1 dogList.append(dst)#获得dog的图片名集合 dstpathdst os.rename(src,dst)
注path为下载的数据集图片的路径
在这步操作后cat和dog的图片名则变为了下列格式 cat1.0.jpg, cat2.0,jpg cat3.0.jpg .... cat12500.0.jpg dog1.1.jpg, dog2.1.jpg .... dog12500.1.jpg 需要强调的是这里的cat1dog1...jpg格式仅仅是一个习惯没有太多的含义真正重要的是01...,这是个标签指明了这张图片的类别,并在构建Dataset类时发挥作用。0代表cat,而1代表dog。
同时catList和dogList还分别存储了猫和狗的图片路径名程就像这样。 [cat1.0.jpg, cat2.0.jpg, cat3.0.jpg, cat4.0.jpg, cat5.0.jpg...] [dog1.1.jpg, dog2.1.jpg, dog3.1.jpg, dog4.1.jpg, dog5.1.jpg...] 之所以这样处理是因为为了易于划分训练集和测试集。 接着实现自己的Dataset类
import torch import os from torch.utils.data import Dataset from torchvision import transforms from PIL import Image import numpy as np
class MyDataset(Dataset): def __init__(self,path_file,namelists,transformNone): self.path_filepath_file self.imgsnamelists self.transformtransform 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))#修改图片大小默认大小 if self.transform: image self.transform(image) #get the labelstr1self.imgs[idx].split(.) labeleval(str1[1]) return image, labeltrain_dataMyDataset(path,catList[0:10000]dogList[0:10000],transformtransforms.Compose([transforms.ToTensor(), transforms.Resize((224,224))]) ) test_dataMyDataset(path,catList[10000:12500]dogList[10000:12500],transformtransforms.Compose([transforms.ToTensor(), transforms.Resize((224,224))]) )
训练集和测试集按82的比例划分。
导入DataLoader:
train_loadertorch.utils.data.DataLoader(train_data, batch_size32, shuffleTrue) test_loadertorch.utils.data.DataLoader(test_data, batch_size32, shuffleTrue)
测试
#测试len(train_data)20000
len(test_data)5000
imgs,labelsnext(iter(train_loader))
imgs.size()torch.Size([32, 3, 224, 224])
labels.size()torch.Size([32])
labelstensor([0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0])