Machine learning 这是使用Pytork训练和测试模型的正确方法吗?
我正在尝试使用Pytorch实现一个带有神经网络的二元分类,以训练一个模型,如下所示:Machine learning 这是使用Pytork训练和测试模型的正确方法吗?,machine-learning,neural-network,pytorch,Machine Learning,Neural Network,Pytorch,我正在尝试使用Pytorch实现一个带有神经网络的二元分类,以训练一个模型,如下所示: model=nn.Sequential( bnn.贝叶斯线性(先验μ=0,先验σ=0.1,内特征=196,外特征=300), nn.ReLU(), bnn.贝叶斯线性(先验μ=0,先验σ=0.1,内特征=300,外特征=196), ) 交叉熵损失=nn.CrossEntropyLoss() klloss=bnn.BKLLoss(减少量=平均值),仅最后一层=假) klweight=0.01 optimizer
model=nn.Sequential(
bnn.贝叶斯线性(先验μ=0,先验σ=0.1,内特征=196,外特征=300),
nn.ReLU(),
bnn.贝叶斯线性(先验μ=0,先验σ=0.1,内特征=300,外特征=196),
)
交叉熵损失=nn.CrossEntropyLoss()
klloss=bnn.BKLLoss(减少量=平均值),仅最后一层=假)
klweight=0.01
optimizer=optim.Adam(model.parameters(),lr=0.01)
培训部分:
培训
对于步进范围(200):
模型=模型(数据张量)
交叉熵=交叉熵损失(模型,目标张量)
#交叉熵=0
kl=kl损耗(型号)
总成本=交叉熵+kl权重*kl
optimizer.zero_grad()
总成本。向后()
optimizer.step()
_,预测=火炬最大值(模型数据,1)
最终=目标张量大小(0)
正确=(预测==目标_张量).sum()
打印('-精度:%f%%'%(100*浮点(正确)/最终))
打印('-CE:%2.2f,KL:%2.2f'(cross_entropy.item(),KL.item())
问题1:这是训练模特的正确方法吗?在许多文章中,我发现有一部分可以迭代DataLoader以获取培训数据,例如:
对于i,枚举中的数据(火车装载机,0):
#获取输入
输入,目标=数据
问题2:如果我可以直接将数据特征(输入)作为数据张量,将数据标签(目标)作为目标张量,那么这个循环有什么用?因为在遍历数据加载器时,需要花费更多的时间
我不知道如何测试我的模型。我做的如下:
correct=0
总数=0
使用手电筒。无梯度()
对于步进范围(数据张量测试大小(0)):
模型=模型(数据张量测试)
_,预测=火炬最大值(模型数据,1)
总+=目标张量测试。大小(0)
正确+=(预测==目标张量测试).sum().item()
打印('测试数据的准确性:%d%%'%(
100*正确/总计)
问题3:测试我上面训练的模型是否正确?我将尝试回答您的问题: 问题1和问题2:
这是训练模特的正确方法吗?在许多文章中,我发现有一个部分可以迭代DataLoader以获取培训数据。
出于以下几个原因,在pytorch中进行培训时,应将数据集与数据加载器一起使用:
测试我上面训练的模型是否正确?
在运行任何推理代码之前,需要使用model.eval()
将模型设置为其求值阶段。我也不明白for循环的意义,因为每次都要传递相同的数据。我通常会这样运行:
correct = 0
total = 0
with torch.no_grad():
model.eval()
for step,(dat,lab) in enumerate(dataloader_test):
models = model(dat)
_, predicted = torch.max(models.data, 1)
total += dat.size(0)
correct += (predicted == lab).sum().item()
print('Accuracy of the test data: %d %%' % (
100 * correct / total))
我将尝试回答您的问题: 问题1和问题2:
这是训练模特的正确方法吗?在许多文章中,我发现有一个部分可以迭代DataLoader以获取培训数据。
出于以下几个原因,在pytorch中进行培训时,应将数据集与数据加载器一起使用:
测试我上面训练的模型是否正确?
在运行任何推理代码之前,需要使用model.eval()
将模型设置为其求值阶段。我也不明白for循环的意义,因为每次都要传递相同的数据。我通常会这样运行:
correct = 0
total = 0
with torch.no_grad():
model.eval()
for step,(dat,lab) in enumerate(dataloader_test):
models = model(dat)
_, predicted = torch.max(models.data, 1)
total += dat.size(0)
correct += (predicted == lab).sum().item()
print('Accuracy of the test data: %d %%' % (
100 * correct / total))