Machine learning 方法:然后在整个集合上进行训练,只有到那时,才能在另一集合上进行评估。在某些情况下,由于计算时间的原因,您甚至不允许自己每个历元计算一次。相反,您将评估每n个时代。但这又取决于您的数据集大小、从该数据集中采样、批量大小和计算成本

Machine learning 方法:然后在整个集合上进行训练,只有到那时,才能在另一集合上进行评估。在某些情况下,由于计算时间的原因,您甚至不允许自己每个历元计算一次。相反,您将评估每n个时代。但这又取决于您的数据集大小、从该数据集中采样、批量大小和计算成本,machine-learning,deep-learning,pytorch,Machine Learning,Deep Learning,Pytorch,对于训练损失,您可以跟踪每个更新步骤与每个历元的值。这将使您能够更好地控制模型是否独立于验证阶段学习 编辑-作为不必为每个列车批次运行整个评估集的替代方法,您可以执行以下操作:洗牌验证并设置与列车集相同的批次大小 len(列车组)//batch\u size是每个历元的更新次数 len(validset)//batch_size是每个历元允许的求值次数 每个len(trainset)//len(validset)您可以在1 批处理 这允许您获得每个历元的反馈次数len(列车集)//len(

对于训练损失,您可以跟踪每个更新步骤与每个历元的值。这将使您能够更好地控制模型是否独立于验证阶段学习


编辑-作为不必为每个列车批次运行整个评估集的替代方法,您可以执行以下操作:洗牌验证并设置与列车集相同的批次大小

  • len(列车组)//batch\u size
    是每个历元的更新次数
  • len(validset)//batch_size
    是每个历元允许的求值次数
  • 每个
    len(trainset)//len(validset)
    您可以在
    1
    批处理
这允许您获得每个历元的反馈次数
len(列车集)//len(有效集)


如果你将训练/有效比率设置为
0.1
,那么
len(validset)=0.1*len(trainset)
,这是每个历元的十个部分评估。

如果你能附加训练循环代码,它会更清晰。@Khalidaifullah添加了一些类似于我的代码。谢谢。很酷,我已经附上了一个答案,看看这是否有帮助。如果你能附上你的训练循环代码,它会更清晰。@Khalidaifullah添加了一些类似于我的代码。谢谢。很好,我已经附上了答案,看看是否有帮助。是的,我想是的。似乎没有别的办法。尝试这个,但会保持这个开放的情况下,有人有另一种方式。如果没有,我会在几天后选择这个答案。谢谢当然,我也想看看其他的方法。是的,我也这么认为。似乎没有别的办法。尝试这个,但会保持这个开放的情况下,有人有另一种方式。如果没有,我会在几天后选择这个答案。谢谢当然,我也想看看其他的方法。同意你所说的。这与超参数调优本身无关,正如您所提到的,我已经在使用epoch-wise-validation-loss来实现这一点。这是我试图对损失做的一个切点观察,通过训练样本/批次而不是整个时代,更好的做法是让损失的粒度更细一些。谢谢你的解释!明白了,我已经用另一种解决方案编辑了我的问题。同意你所说的。这与超参数调优本身无关,正如您所提到的,我已经在使用epoch-wise-validation-loss来实现这一点。这是我试图对损失做的一个切点观察,通过训练样本/批次而不是整个时代,更好的做法是让损失的粒度更细一些。谢谢你的解释!明白了,我已经用另一种解决方案编辑了我的问题。
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
    # get the inputs; data is a list of [inputs, labels]
    inputs, labels = data

    # zero the parameter gradients
    optimizer.zero_grad()

    # forward + backward + optimize
    outputs = net(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()

    # print statistics
    running_loss += loss.item()
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
        # validation loss
        batch_loss = error(outputs.float(), labels.long()).item()
        loss_test += batch_loss
    loss_test /= len(testloader)