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
,但您认为您在原始代码中包含了更多内容,对吗
在任何情况下,请检查这些更改是否对您有所帮助。您的模型是否具有批处理规范层(或其他规范化层)?退出层?您的模型是否有批处理规范层(或其他规范化层)?退出层?