程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了这是使用 Pytorch 训练和测试模型的正确方法吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决这是使用 Pytorch 训练和测试模型的正确方法吗??

开发过程中遇到这是使用 Pytorch 训练和测试模型的正确方法吗?的问题如何解决?下面主要结合日常开发的经验,给出你关于这是使用 Pytorch 训练和测试模型的正确方法吗?的解决方法建议,希望对你解决这是使用 Pytorch 训练和测试模型的正确方法吗?有所启发或帮助;

我正在尝试使用 Pytorch 使用神经网络实现二元分类来训练模型,如下所示:

@H_303_5@model = nn.Sequential(
    bnn.bayeslinear(prior_mu=0,prior_sigma=0.1,in_features=196,out_features=300),nn.ReLU(),bnn.bayeslinear(prior_mu=0,in_features=300,out_features=196),)
cross_entropy_loss = nn.CrossEntropyLoss()
klloss = bnn.bKLLoss(reduction='mean',last_layer_only=falsE)
klweight = 0.01
optimizer = optim.Adam(model.parameters(),lr=0.01)

训练部分:

 #Training
    for step in range(200):
        models = model(data_tensor)
        cross_entropy = cross_entropy_loss(models,target_tensor)
        #cross_entropy = 0
        kl = klloss(model)
        @R_225_10586@l_cost = cross_entropy + klweight*kl
    
        optimizer.zero_grad()
        @R_225_10586@l_cost.BACkWARD()
        optimizer.step()
      
    _,preDicted = torch.max(models.data,1)
    final = target_tensor.size(0)
    correct = (preDicted == target_tensor).sum()
    print('- Accuracy: %f %%' % (100 * float(correct) / final))
    print('- CE : %2.2f,KL : %2.2f' % (cross_entropy.item(),kl.item()))

问题 1: 这是训练模型的正确方法吗?在很多文章中,我发现有一个部分可以遍历 DataLoader 以获取训练数据,例如:

for i,data in enumerate(Trainloader,0):
 # Get inputs
 inputs,targets = data

问题 2: 如果我可以直接将数据特征(输入)作为 data_tensor 和数据标签(目标)作为 target_tensor,这个循环有什么用?因为在遍历数据加载器时,需要更多时间。

我不知道如何测试我的模型。我做了如下:

correct = 0
@R_225_10586@l = 0
with torch.no_grad():
    for step in range(data_tensor_test.size(0)):
        models = model(data_tensor_test)
        _,1)
        @R_225_10586@l += target_tensor_test.size(0)
        correct += (preDicted == target_tensor_test).sum().item()

print('Accuracy of the test data: %d %%' % (
    100 * correct / @R_225_10586@l))

问题 3:测试我上面训练的模型是否正确?

解决方法

我会尝试回答您的问题:

问题 1 和 2: Is it a right way to Train a model? In many articles I found that there is a section to iterate over the DataLoader for Training data.

在 pytorch 中训练时,您应该使用带有数据加载器的数据集,原因如下:

  1. 它允许我们随机采样我们的数据
  2. 它不会将数据预加载到内存中,这对于大型数据集特别有用
  3. 它在代码后台运行,因此与训练并行获取数据,从而节省时间
  4. 批量处理数据非常有效

您在这里所做的似乎是一次在数据中的每个元素上运行您的模型。如果您的数据中只有 32 个点,这可能没问题(尽管由于数据如此有限而确实不是最佳选择)但是在运行优化器和将模型暴露给学习机会之间需要取得平衡。

我猜这需要更长的时间,因为您的模型非常小,并且运行数据获取所需的时间可能比已经预加载到内存中的时间长。如果不知道数据集的大小和处理的批量大小,就很难回答这个问题。

问题 3: Is it right way to test the model that I Trained above? 在运行任何推理代码之前,您需要使用 @H_303_5@model.eval() 将模型设置为其评估阶段。我也不明白你的 for 循环的意义,因为你每次都传递相同的数据。我通常会运行这样的东西:

correct = 0
@R_225_10586@l = 0
with torch.no_grad():
    model.eval()
    for step,(dat,lab) in enumerate(dataloader_test):
        models = model(dat)
        _,preDicted = torch.max(models.data,1)
        @R_225_10586@l += dat.size(0)
        correct += (preDicted == lab).sum().item()

print('Accuracy of the test data: %d %%' % (
    100 * correct / @R_225_10586@l))
@H_944_76@

大佬总结

以上是大佬教程为你收集整理的这是使用 Pytorch 训练和测试模型的正确方法吗?全部内容,希望文章能够帮你解决这是使用 Pytorch 训练和测试模型的正确方法吗?所遇到的程序开发问题。

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

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