程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在 Pytorch 中测试自定义数据集?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在 Pytorch 中测试自定义数据集??

开发过程中遇到如何在 Pytorch 中测试自定义数据集?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在 Pytorch 中测试自定义数据集?的解决方法建议,希望对你解决如何在 Pytorch 中测试自定义数据集?有所启发或帮助;

我一直在关注 Pytorch 中使用来自 Pytorch 的数据集的教程,这些教程允许您启用是否要使用数据进行训练……但现在我使用的是 .csv 和自定义数据集。

class MyDataset(Dataset):
    def __init__(self,root,n_inp):
        self.df = pd.read_csv(root)
        self.data = self.df.to_numpy()
        self.x,self.y = (torch.from_numpy(self.data[:,:n_inp]),torch.from_numpy(self.data[:,n_inp:]))
    def __getitem__(self,IDX):
        return self.x[IDx,:],self.Y[IDx,:]
    def __len__(self):
        return len(self.data)

如何告诉 Pytorch 不要训练我的 test_dataset,以便我可以将其用作模型准确度的参

Train_dataset = MyDataset("heart.csv",input_sizE)
Train_loader = DataLoader(Train_dataset,batch_size=batch_size,shuffle =TruE)
test_dataset = MyDataset("heart.csv",input_sizE)
test_loader = DataLoader(test_dataset,shuffle =TruE)

解决方法

在 pytorch 中,自定义数据集继承类 Dataset。它主要包含两个方法,__len__() 是指定要迭代的数据集对象的长度,__getitem__() 是一次返回一批数据。

初始化数据加载器对象后(代码中指定的 Train_loadertest_loader),您需要编写一个训练循环和一个测试循环。

def Train(model,optimizer,loss_fn,dataloader):
    model.Train()
    for i,(input,gt) in enumerate(dataloader):
        if paramS.Use_gpu: #(If Training using GPU)
            input,gt = input.cuda(non_blocking = TruE),gt.cuda(non_blocking = TruE)
        preDicted = model(input)
        loss = loss_fn(preDicted,gt)
        optimizer.zero_grad()
        loss.BACkWARD()
        optimizer.step()

并且您的测试循环应该是:

def test(model,dataloader):
    model.eval()
    for i,gt.cuda(non_blocking = TruE)
        preDicted = model(input)
        loss     = loss_fn(preDicted,gt)

此外,您可以使用指标字典来记录您的预测、损失、时期等。训练循环和测试循环之间的主要区别在于我们在推理阶段排除了反向传播 (zero_grad(),BACkWARD(),step())。

最后,

for epoch in range(1,epochs + 1):
    Train(model,Train_loader)
    test(model,test_loader)
,

在 pytorch 中进行测试时需要注意以下几点:

  1. 将您的模型置于评估模式,这样 dropout 和批量归一化之类的事情就不会处于训练模式:@H_544_5@model.eval()
  2. 在您的测试代码周围放置一个包装器以避免计算梯度(节省内存和时间):with torch.no_grad():
  3. 仅根据您的训练集对您的数据进行规范化或标准化。这对于最小/最大归一化或 z 分数标准化很重要,以便模型准确反映测试性能。

除此之外,您编写的内容在我看来还不错,因为您没有对数据应用任何变换(例如,图像翻转或高斯噪声注入)。要显示测试模式下的代码应该是什么样子,请参见下文:

for e in range(num_epochs):
    for B,(dat,label) in enumerate(Train_loader):
         #transforms here
         opt.zero_grad()
         out = model(dat.to(devicE))
         loss = criterion(out)
         loss.BACkWARD()
         opt.step()
    with torch.no_grad():
         model.eval()
         global_corr = 0
         for B,label) in enumerate(test_loader):
             out = model(dat.to(devicE))
             # get batch eval metrics here!

     
@H_262_71@
@H_262_71@

大佬总结

以上是大佬教程为你收集整理的如何在 Pytorch 中测试自定义数据集?全部内容,希望文章能够帮你解决如何在 Pytorch 中测试自定义数据集?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。