我正在尝试按照以下方式训练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()”时,其括号几乎完全相同。我不知道这有什么区别,希望有人能向我解释。
答案 0 :(得分:1)
我假设您是python的新手,'()'意味着简单的函数调用。 考虑以下示例:
>>> def foo():
print("function")
>>> foo
<function __main__.foo>
>>> foo()
function
记住函数是python中的对象,您甚至可以这样存储它们:
>>> [foo, foo, foo]
回到您的问题,您必须调用该函数,否则它将不起作用。