Python 具有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

我花了一整天的时间到处阅读关于在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_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