Чтобы сделать шаг градиентного спуска, вы обычно используете optimizer.step()
.
Вот также пример, взятый из документации (та же ссылка внизу) , как это выглядит в целом:
for input, target in dataset:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()
Не знаюне знаешь, откуда у тебя это model.step()
?Вы пробовали это?
Если ваша модель действительно обладает какой-то step()
-функцией , возможно, она делает что-то иное.
Но если вы не определите что-то дополнительное, ваш model
получитего функции от nn.Module
и у него нет функции step
!
См. этот пример в документации Pytorch :
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'
Чтобы подвести итог, обычно ваш model
должен не иметь функцию step()
, optimizer.step()
- это путь, если вы хотите выполнить шаг оптимизации .
См. Также здесь: https://pytorch.org/docs/stable/optim.html#taking-an-optimization-step