大佬教程收集整理的这篇文章主要介绍了这是使用 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 中训练时,您应该使用带有数据加载器的数据集,原因如下:
您在这里所做的似乎是一次在数据中的每个元素上运行您的模型。如果您的数据中只有 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))
以上是大佬教程为你收集整理的这是使用 Pytorch 训练和测试模型的正确方法吗?全部内容,希望文章能够帮你解决这是使用 Pytorch 训练和测试模型的正确方法吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。