pytorch: zero_grad vs zero_grad () - роль скобок? - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь обучить модель pytorch следующим образом:

start = time.time()

for epoch in range(100):

    t_loss = 0
    for i in range(100):


        optimizer.zero_grad
        scores = my_model(sent_dict_list[i])
        scores = scores.permute(0, 2, 1)

        loss = loss_function(scores, torch.tensor(targ_list[i]).cuda())
        t_loss += loss.item()
        loss.backward()
        optimizer.step()

    print("t_loss = ", t_loss)

Я обнаружил, что когда я вызываю "optimizer.zero_grad", моя потеря уменьшается в конце каждой эпохи, тогда как когда я вызываю "optimizer.zero_grad ()" с круглыми скобками, он остается почти таким же. Я не знаю, какое это имеет значение, и надеялся, что кто-нибудь сможет мне это объяснить.

1 Ответ

0 голосов
/ 28 июня 2018

Я предполагаю, что вы новичок в python, '()' означает простой вызов функции. Рассмотрим этот пример:

>>> def foo():
       print("function")

>>> foo
<function __main__.foo>
>>> foo()
function

Помните, что функции в Python являются объектами, вы даже можете хранить их так:

>>> [foo, foo, foo]

Возвращаясь к вашему вопросу, вы должны вызвать функцию, иначе она не будет работать.

...