pytorch: model.forward () влияет на процесс обучения, даже если результат не является частью функции потерь - PullRequest
1 голос
/ 26 февраля 2020

У меня есть следующий код для обучения простой модели:

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 для добавления новое выражение для функции потерь.

1 Ответ

0 голосов
/ 26 февраля 2020

Я бы предложил следующие изменения:

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, но вы думаете, что вы включаете больше материала в свой оригинальный код, верно?

В любом случае, проверьте, помогают ли вам эти изменения.

...