gpt4 book ai didi

python - 在 pytorch 中使用 optimizer.step 或 model.step 有什么不同吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:03 28 4
gpt4 key购买 nike

在pytorch中,要更新模型,我应该使用optimizer.step()还是model.step()

这是一个示例片段:

import torch
import torch nn
class SomeNeuralNet(nn.Module):
def __init__(self,hs,es,dropout):
SomeNeuralNet(ClaimRecognizer, self).__init__()
# Some initialization here
def forward(x):
# forward propagation here

model = SomeNeuralNet(es,hs,dp)
optimizer = optim.Adam(model.parameters())
loss_function = nn.NLLLoss()
for epoch in N:
for x in data:
logp = model(x)
loss = loss_function(logp,gold_outs)
loss.backward()
# Which one I should call ? Optimizer.step() or model.step() or both ?
optimizer.step()
model.step()

最佳答案

要进行梯度下降步骤,您通常只使用 optimizer.step()
这里还有一个例子取自 documentation (same link at bottom) ,一般情况下的样子:

for input, target in dataset:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()

我不知道你从哪里得到这个model.step()?你尝试了吗?

如果您的模型确实拥有某种step()-功能,它可能会做一些不同的事情。

但是除非您定义了一些额外的东西,否则您的模型 会从nn.Module 获取其功能。而且这个没有step函数!

请参阅 Pytorch Documentation 中的此示例:

import torch.nn as nn
import torch.nn.functional as F

class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.conv1 = nn.Conv2d(1, 20, 5)
self.conv2 = nn.Conv2d(20, 20, 5)

def forward(self, x):
x = F.relu(self.conv1(x))
return F.relu(self.conv2(x))

model = Model()
model.step()

尝试调用 step() 导致 AttributeError:

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-41-b032813f7eda> in <module>
13
14 model = Model()
---> 15 model.step()

~/miniconda3/envs/py37/lib/python3.7/site-packages/torch/nn/modules/module.py in __getattr__(self, name)
530 return modules[name]
531 raise AttributeError("'{}' object has no attribute '{}'".format(
--> 532 type(self).__name__, name))
533
534 def __setattr__(self, name, value):

AttributeError: 'Model' object has no attribute 'step'

总而言之,通常你的模型应该有一个step()函数,optimizer.step()<如果您想执行优化步骤 是必经之路。

另见此处: https://pytorch.org/docs/stable/optim.html#taking-an-optimization-step

关于python - 在 pytorch 中使用 optimizer.step 或 model.step 有什么不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53302713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com