Python 具有PyTorch的K-Fold数据集子集
我花了一整天的时间到处阅读关于在PyTorch中实现K-Fold交叉验证的文章,但没能让它起作用。我有一个为我的数据集编写的自定义子集,但这也不起作用。。。有问题的代码如下所示:Python 具有PyTorch的K-Fold数据集子集,python,pytorch,cross-validation,Python,Pytorch,Cross Validation,我花了一整天的时间到处阅读关于在PyTorch中实现K-Fold交叉验证的文章,但没能让它起作用。我有一个为我的数据集编写的自定义子集,但这也不起作用。。。有问题的代码如下所示: for epoch in range(training_configuration.epochs_count): mean = [0.5768, 0.4622, 0.3460] std = [0.2383, 0.2464, 0.2465] if data_aug
for epoch in range(training_configuration.epochs_count):
mean = [0.5768, 0.4622, 0.3460]
std = [0.2383, 0.2464, 0.2465]
if data_augmentation:
train_transforms = data_augmentation_transforms(mean, std)
print('Data Augmentation: On')
else:
train_transforms = image_common_transforms(mean, std)
print('Data Augmentation: Off')
test_transforms = image_common_transforms(mean, std)
dataset = KenyanFood13Dataset(
root_dir = train_config.root_dir,
img_path = train_config.img_path,
csv_file = train_config.csv_path,
transform = train_transforms)
kf = KFold(n_splits=5, shuffle=True)
for i, (train_index, test_index) in enumerate(kf.split(dataset)):
train = torch.utils.data.Subset(dataset, train_index)
test = torch.utils.data.Subset(dataset, test_index)
train_loader = DataLoader(train, batch_size=train_config.batch_size, shuffle=True, num_workers=train_config.num_workers)
test_loader = DataLoader(test, batch_size=train_config.batch_size, shuffle=False, num_workers=train_config.num_workers)
print('Data: New fold successfully')
init_val_loss, init_val_accuracy = validate(training_configuration, model, test_loader)
print(f'Initial Validation Loss: {init_val_loss:.6f}, Initial Validation Accuracy: {init_val_accuracy*100:.3f}%\n')
# --------- THIS IS WHERE THE ERROR IS -------------
train_loss, train_acc = train(
train_config=training_configuration,
model=model,
optimizer=optimizer,
train_loader=train_loader,
epoch_idx=epoch)
回溯:
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
34位英国作家,
35调度程序=调度程序,
--->36数据(增加=真)
主要(模型、优化器、tb编写器、调度程序、培训配置、数据扩充)
65优化器=优化器,
66列装载机=列装载机,
--->67历元(idx=历元)
68
69历元列车损失=np.追加(历元列车损失,[列车损失])
TypeError:“子集”对象不可调用
关于如何实现这一点有什么想法吗?我刚刚偶然发现了这一点,我们中的一些人构建了一个经过修改的PyTorch数据加载器来完成这类工作(动态类标签/子集等)——也许你会发现它很有帮助?()我偶然发现了这一点,我们中的一些人构建了一个经过修改的PyTorch数据加载器来做这类事情(动态类标签/子集等)——也许你会觉得它有用?()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-19-c606f47fba53> in <module>
34 tb_writer,
35 scheduler=scheduler,
---> 36 data_augmentation=True)
<ipython-input-18-05bc5c268921> in main(model, optimizer, tb_writer, scheduler, training_configuration, data_augmentation)
65 optimizer=optimizer,
66 train_loader=train_loader,
---> 67 epoch_idx=epoch)
68
69 epoch_train_loss = np.append(epoch_train_loss, [train_loss])
TypeError: 'Subset' object is not callable