deep-learning - pytorch:model.forward() 会影响训练过程,即使结果不是损失函数的一部分
问题描述
我有以下代码来训练一个简单的模型:
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 向损失函数添加新表达式。
解决方案
我建议进行以下更改:
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(X)
loss1 = ce(pred, y)
for j in range(2):
model.eval()
X2, y2 = next(another_loader)
pred2 = model(X2)
new_loss = loss1
optimizer.zero_grad()
new_loss.backward()
optimizer.step()
我还要说您不需要new_loss = loss1
,但认为您在原始代码中包含更多内容,对吗?
无论如何,请检查这些更改是否对您有帮助。
推荐阅读
- python - 为什么我在简单的 Keras 功能 API 中收到输入错误?
- r - r raster levelplot 代码独立工作,但不在 for 循环中
- android - 模拟当前时间
- python - 解析具有随机间距和重复文本的文本文件?
- java - 测试 spring 云流服务的问题
- java - 反转 HashMap
- javascript - 是否可以使用javascripts fillRect() 函数从中心填充
- android - 如何在 GridLayout 上添加 TextView?
- android - 我没有使用 Firebase 电话身份验证获取验证码
- java - 在 SQL Server 上获得相似词的最佳方法是什么?