Я потратил весь день, пытаясь прочитать всюду о внедрении кросс-валидации K-Fold в PyTorch, но не могу заставить ее работать. У меня есть настраиваемое подмножество, написанное для моего набора данных, но это тоже не работает ... Код, имеющий проблемы, следующий:
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)
Traceback :
---------------------------------------------------------------------------
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
Есть мысли о том, как я могу это реализовать?