Deep learning pytorch:model.forward()影响训练过程,即使结果不是损失函数的一部分

Deep learning pytorch:model.forward()影响训练过程,即使结果不是损失函数的一部分,deep-learning,pytorch,Deep Learning,Pytorch,我有以下代码来训练一个简单的模型: train_loader, another_loader = get_loaders() model = torch_utils.get_model() ce = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) another_loader_iter = iter(another_loader) for epoch in rang

我有以下代码来训练一个简单的模型:

train_loader, another_loader = get_loaders()
model = torch_utils.get_model()

ce = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
another_loader_iter = iter(another_loader)

for epoch in range(10):
    for i, (X, y) in enumerate(train_loader):
        model.train()
        X, y = X.to(device), y.to(device)
        pred = model.forward(X)
        loss1 = ce(pred, y)
        for j in range(2):
            X2, y2 = next(another_loader)
            pred2 = model.forward(X2) #**This line effects the training process - why???**

        new_loss = loss1
        optimizer.zero_grad()
        new_loss.backward()
        optimizer.step()

当我注释掉pred2=model.forward(X2)时,模型按其应该的方式训练,但我想使用pred2向损失函数添加一个新的表达式。

我建议进行以下更改:

用于范围(10)内的历元:
对于枚举(列装载机)中的i,(X,y):
模型列车()
十、 y=X.to(设备),y.to(设备)
pred=模型(X)
loss1=ce(pred,y)
对于范围(2)内的j:
model.eval()
X2,y2=下一个(另一个_加载器)
pred2=模型(X2)
新损失=损失1
optimizer.zero_grad()
新的_loss.backward()
optimizer.step()
我还想说,您不需要
new\u loss=loss1
,但您认为您在原始代码中包含了更多内容,对吗


在任何情况下,请检查这些更改是否对您有帮助。

我建议进行以下更改:

用于范围(10)内的历元:
对于枚举(列装载机)中的i,(X,y):
模型列车()
十、 y=X.to(设备),y.to(设备)
pred=模型(X)
loss1=ce(pred,y)
对于范围(2)内的j:
model.eval()
X2,y2=下一个(另一个_加载器)
pred2=模型(X2)
新损失=损失1
optimizer.zero_grad()
新的_loss.backward()
optimizer.step()
我还想说,您不需要
new\u loss=loss1
,但您认为您在原始代码中包含了更多内容,对吗


在任何情况下,请检查这些更改是否对您有所帮助。

您的模型是否具有批处理规范层(或其他规范化层)?退出层?您的模型是否有批处理规范层(或其他规范化层)?退出层?