我的代码:
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语法吗??
答案 0 :(得分:2)
因为您的模型 MultivariateLinearRegressionModel
是从 nn.Module
继承的,所以当您调用 model(x_train)
时,它会自动执行 forward
中定义的 MultivariateLinearRegressionModel
函数班级。
这就是 model(x_train)
和 model.forward(x_train)
给出相同结果的原因。