内部已经包含训练模块
#k折交叉验证部分def k_fold(k,image_dir,num_epochs,device,batch_size,optimizer,loss,net):train_k = './/shallow//train_k.txt'test_k = './/shallow//test_k.txt'#loss_acc_sum,train_acc_sum, test_acc_sum = 0,0,0Ktrain_min_l = []Ktrain_acc_max_l = []Ktest_acc_max_l = []for i in range(k):get_k_fold_data(k, i,image_dir)#修改train函数,使其返回每一批次的准确率,tarin_ls用列表表示train_data = MyDataset(is_train=True, root=train_k)test_data = MyDataset(is_train=False, root=test_k)train_loader = torch.utils.data.DataLoader(dataset=train_data, batch_size=10, shuffle=True, num_workers=num_workers)test_loader = torch.utils.data.DataLoader(dataset=test_data, batch_size=10, shuffle=True, num_workers=num_workers)loss_min,train_acc_max,test_acc_max=train(i,train_loader,test_loader, net, loss, optimizer, device, num_epochs)Ktrain_min_l.append(loss_min)Ktrain_acc_max_l.append(train_acc_max)Ktest_acc_max_l.append(test_acc_max)#train_acc_sum += train_acc# train函数epoches(即第k个数据集被测试后)结束后,累加#test_acc_sum += test_acc##loss_acc_sum+=loss_acc#print('fold %d, lose_rmse_max %.4f, train_rmse_max %.4f, test_rmse_max %.4f ' %(i+1, loss_acc,train_acc, test_acc_max_l[i]))return sum(Ktrain_min_l)/len(Ktrain_min_l),sum(Ktrain_acc_max_l)/len(Ktrain_acc_max_l),sum(Ktest_acc_max_l)/len(Ktest_acc_max_l)
