Python 迭代torch.utils.data.random\u split中的子集
我目前正在加载一个包含AI训练数据的文件夹。子文件夹表示标签名称,其中包含相应的图像。通过使用pyTorch的ImageFolder加载程序,这一点非常有效Python 迭代torch.utils.data.random\u split中的子集,python,loops,pytorch,Python,Loops,Pytorch,我目前正在加载一个包含AI训练数据的文件夹。子文件夹表示标签名称,其中包含相应的图像。通过使用pyTorch的ImageFolder加载程序,这一点非常有效 def load_dataset(): data_path = 'C:/example_folder/' train_dataset_manual = torchvision.datasets.ImageFolder( root=data_path, transform=torchvisio
def load_dataset():
data_path = 'C:/example_folder/'
train_dataset_manual = torchvision.datasets.ImageFolder(
root=data_path,
transform=torchvision.transforms.ToTensor()
)
train_loader_manual = torch.utils.data.DataLoader(
train_dataset_manual,
batch_size=1,
num_workers=0,
shuffle=True
)
return train_loader_manual
full_dataset = load_dataset()
现在我想把这个数据集分为一个训练数据集和一个测试数据集。我使用随机_分割函数进行此操作:
training_data_size = 0.8
train_size = int(training_data_size * len(full_dataset))
test_size = len(full_dataset) - train_size
train_dataset, test_dataset = torch.utils.data.random_split(full_dataset, [train_size, test_size])
完整的数据集是类型为torch.utils.data.dataloader.dataloader
的对象。我可以用这样的循环遍历它:
for batch_idx, (data, target) in enumerate(full_dataset):
print(batch_idx)
train\u数据集
是类型为torch.utils.data.dataset.Subset的对象。如果我尝试循环通过它,我会得到:
TypeError“DataLoader”对象不可订阅:
我怎样才能循环通过它?我对Python比较陌生
谢谢 您需要对数据集
而不是数据加载器
应用随机分割
。用于定义DataLoader
的数据集可在DataLoader.dataset
成员中找到
比如你可以做什么
train_dataset, test_dataset = torch.utils.data.random_split(full_dataset.dataset, [train_size, test_size])
train_loader = DataLoader(train_dataset, batch_size=1, num_workers=0, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1, num_workers=0, shuffle=False)
然后您可以按预期迭代训练装载机
和测试装载机
train_dataset, test_dataset = torch.utils.data.random_split(full_dataset.dataset, [train_size, test_size])
train_loader = DataLoader(train_dataset, batch_size=1, num_workers=0, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1, num_workers=0, shuffle=False)