Pytorch 使用Pyrotch进行5倍交叉验证

Pytorch 使用Pyrotch进行5倍交叉验证,pytorch,Pytorch,需要对我的数据集执行5倍交叉验证。我能找到两个这样做的例子,但不能集成到我目前的管道。有人能帮我吗 ############################################################################################### class leukemiaClassifier(Dataset): def __init__(self, csv_file, transform): self.data = pd.

需要对我的数据集执行5倍交叉验证。我能找到两个这样做的例子,但不能集成到我目前的管道。有人能帮我吗

###############################################################################################
class leukemiaClassifier(Dataset):
    def __init__(self, csv_file, transform):

        self.data = pd.read_csv(csv_file)
        self.data = self.data
        self.transform = transform

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        img_name = self.data.loc[idx][0]
        img = Image.open(img_name).convert('RGB') 

        img = cv2.imread(img_name)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        image = self.transform(image=img)
        image = image['image']
        labels = torch.tensor(self.data.loc[idx][1])
        return image, labels

train_file = 'train.csv'
val_file = 'test.csv'
batch_size = 28

train_dataset = leukemiaClassifier(
    csv_file=train_file,transform = data_transforms)

val_dataset = leukemiaClassifier(
    csv_file=val_file, transform = data_transforms_test)

read_target = pd.read_csv('train.csv')
target = read_target['label'].values

data_loader_train = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True,num_workers=64)
data_loader_val = torch.utils.data.DataLoader(val_dataset, batch_size=batch_size, shuffle=False, num_workers=64)
###############################################################################################
#Model Utils Hyperparameter etc
###############################################################################################

def get_lr(optimizer):
    for param_group in optimizer.param_groups:
        return param_group['lr']

def efficientnet(version,num_classes):
    model = EfficientNet.from_pretrained('efficientnet-b{}'.format(version), num_classes=num_classes)
    num_ftrs = model._fc.in_features
    model._fc = nn.Linear(num_ftrs, num_classes)
    return model.cuda()

target_names = ['Lymphocyte(atypical)', 'Monoblast', 'Promyelocyte(bilobed)', 'Metamyelocyte', 'Erythroblast', 'Neutrophil(segmented)', 'Myeloblast','Promyelocyte','Monocyte','Lymphocyte(typical)','Neutrophil(band)','Smudge cell', 'Eosinophil',  'Myelocyte',   'Basophil']
model= efficientnet(5,15)
model = nn.DataParallel(model)
wandb.watch(model)
# criterion = torch.nn.CrossEntropyLoss()
criterion = FocalLoss()
labels = torch.tensor((0,1,2,3,4,5,6,7,8,9,10,11,12,13,14)).cuda()
no_of_classes = 15
optimizer = optim.Adam(model.parameters(), lr=0.01)
scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.01, patience=5, verbose=True)
global_validation_loss= 100
###############################################################################################
#Training and validation loop
###############################################################################################
for epoch in range(300000): # loop over the dataset multiple times
    running_loss = 0.0
    label_list =[]
    predicted_list=[]
    model = model.train()
    for batch_idx, data in enumerate( tqdm.tqdm(data_loader_train)):

        inputs,labels = data
        inputs,labels = inputs.cuda(), labels.cuda().long()

        # zero the parameter gradients
        optimizer.zero_grad()
        # forward + backward + optimize
        outputs = model(inputs)
        loss = criterion(outputs,labels)
        # print(loss)
        loss.backward()
        optimizer.step()
        for item in torch.argmax(outputs,1).detach().cpu().numpy():predicted_list.append(item)
        for item in labels.detach().cpu().numpy():label_list.append(item)
        # print statistics
        running_loss += loss.item()

嗨,瑞安。您能否澄清您在整合过程中面临的确切问题?那就更容易帮助你了。@ShagunSodhani老实说,我不知道该怎么做。上面的代码没有进行任何类型的拆分,而是对整个数据集进行训练。