pytorch:zero_grad与zero_grad()-括号的作用?

时间:2018-06-28 12:06:21

标签: neural-network pytorch

我正在尝试按照以下方式训练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 :(得分:1)

我假设您是python的新手,'()'意味着简单的函数调用。 考虑以下示例:

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

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

记住函数是python中的对象,您甚至可以这样存储它们:

>>> [foo, foo, foo]

回到您的问题,您必须调用该函数,否则它将不起作用。