使用 pytorch 进行梯度下降

时间:2021-06-27 13:32:55

标签: python-3.x pytorch

<块引用>

我的代码:

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

class MultivariateLinearRegressionModel(nn.Module):
  def __init__(self):
    super().__init__()
    self.linear = nn.Linear(3,1)

  def forward(self,x):
# print(1)
    return self.linear(x)


x_train = torch.FloatTensor([[73,80,75],
                             [93,88,93],
                             [89,91,90],
                             [96,98,100],
                             [73,66,70]])
y_train = torch.FloatTensor([[152],[185],[180],[196], [142]])

model = MultivariateLinearRegressionModel()

optimizer = torch.optim.SGD(model.parameters(), lr = 1e-5)
# print(222)
ep = 2000
for epoch in range(ep+1):
   hypothesis = model(x_train)

   cost = F.mse_loss(hypothesis, y_train)
   if epoch % 100 == 0:
     print('Epoch {:4d}/{} Cost: {:.6f}'.format(
        epoch, 2000, cost.item()
    ))
   optimizer.zero_grad()
   cost.backward()
   optimizer.step()
<块引用>

我的问题:

这段代码是我自己的 MultivariateLinearRegressionModel。

但是在for循环中 hypothesis = model(x_train) 为什么此代码与 hypothesis = model.forward(x_train) ??

我不知道为什么这两个代码语句是一样的。 这是python语法吗??

1 个答案:

答案 0 :(得分:2)

因为您的模型 MultivariateLinearRegressionModel 是从 nn.Module 继承的,所以当您调用 model(x_train) 时,它会自动执行 forward 中定义的 MultivariateLinearRegressionModel 函数班级。

这就是 model(x_train)model.forward(x_train) 给出相同结果的原因。