日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch 怎么构建自己的数据集。怎么重写官方数据集。

發(fā)布時間:2025/4/16 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch 怎么构建自己的数据集。怎么重写官方数据集。 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

小白記錄,大神勿擾

?

小白入門的時候,發(fā)現(xiàn),現(xiàn)有的基本都是直接類似這樣的:

trainset = datasets.MNIST('../MNIST', download=True,train=True, transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))])) train_loader = DataLoader(trainset, batch_size=128, shuffle=True, num_workers=4)

這個download=True直接解決了一切問題,卻不理解發(fā)生腎么事了。

而且由于網(wǎng)不好等原因,常常無法自動下載。

這個網(wǎng)上有一些方法,提前自己把數(shù)據(jù)下載好,放在download的那個目錄下。

或者改源代碼的下載鏈接為本地目錄。

例如:https://zhuanlan.zhihu.com/p/129081723

?

有時候,大多數(shù)時候想用自己數(shù)據(jù)集,如下這樣類似的寫法:

class MyDataset(Dataset):def __init__(self, image_path, label_path, setid_path, train=True, transform=None):setid = scipy.io.loadmat(setid_path)labels = scipy.io.loadmat(label_path)['labels'][0]if train:trnid = setid['tstid'][0]self.labels = [labels[i - 1] - 1 for i in trnid]self.images = ['%s/image_%05d.jpg' % (image_path, i) for i in trnid]else:tstid = np.append(setid['valid'][0], setid['trnid'][0])self.labels = [labels[i - 1] - 1 for i in tstid]self.images = ['%s/image_%05d.jpg' % (image_path, i) for i in tstid]self.transform = transformdef __getitem__(self, index):label = self.labels[index]image = self.images[index]if self.transform is not None:image = self.transform(Image.open(image))return image, labeldef __len__(self):return len(self.labels)

init初始化,一般就包括加載數(shù)據(jù)啊,然后整體數(shù)據(jù)的一些基本處理之類的。數(shù)據(jù)可以來自自己定義放好的本地文件夾,也可以是自己在code之前就完成加載的numpy格式或者其他格式的數(shù)據(jù)(這時候init中就不需要加本地路徑了)。

getitem,每次調(diào)用數(shù)據(jù),其實就是調(diào)用它,后面index不要丟。內(nèi)部一般就寫 init之后,數(shù)據(jù)被加載之前 還需要進行的一些處理。這里,比如你要加載不一樣的圖像,這里return不同的就可以了。

len,就返回一個數(shù)據(jù)長度即可。

?

然后調(diào)用自己定義的數(shù)據(jù)集,MyDataset,再放到loader中,再從loader中直接拿數(shù)據(jù)就ok了,這時候拿到的數(shù)據(jù)就是一個batch一個batch的。

train_dataset = MyDataset(image_path, label_path, setid_path,train=True, transform=transforms.Compose([transforms.RandomHorizontalFlip(),transforms.RandomRotation(30),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]))train_loader = DataLoader(train_dataset, batch_size=BATCH, shuffle=True).......for batch_idx, (image, label) in enumerate(train_loader):...

好,然后怎么重載官網(wǎng)數(shù)據(jù)集,比如說,你載loader中,希望每次加載這樣的數(shù)據(jù),image1,image2,label

又是基于現(xiàn)有數(shù)據(jù)集,比如minist,那么就可以重寫這個官網(wǎng)的數(shù)據(jù)集。本質(zhì)上和完全自己定義是一回事。

示例代碼如下:

class CIFAR10_(datasets.CIFAR10):"""CIFAR10 Dataset."""def __getitem__(self, index):img, target = self.data[index], self.targets[index]img = Image.fromarray(img)if self.target_transform is not None:target = self.target_transform(target)if self.transform is not None:img1 = self.transform(img)if self.train:img2 = self.transform(img)if self.train:return img1, img2, target, index

?然后改怎么使用,就怎么使用,可以自己下載好:

trainset = datasets.CIFAR10_(root='./data', train=True, download=True, transform=transform_train) trainloader = torch.utils.data.DataLoader(trainset, batch_size=args.batch_size, shuffle=True, num_workers=4, drop_last=True) testset = datasets.CIFAR10_(root='./data', train=True, download=False, transform=transform_test) testloader = torch.utils.data.DataLoader(testset, batch_size=100, shuffle=False, num_workers=4, drop_last=True)

這時候train loader中出來的 就是 這個樣子的:

for batch_idx, (inputs1, inputs2, target, indexes) in enumerate(trainloader):...

ok

?

?

?

?

?

?

?

?

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Pytorch 怎么构建自己的数据集。怎么重写官方数据集。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。