up主 刘二大人
使用Pytorch搭建线性模型
1. 准备数据集
2. 设计模型类
3. 定义loss以及优化器
4. 训练 forward -> backward -> update
线性模型
import torch
import matplotlib.pyplot as plt
class LinearModel(torch.nn.Module):
"""
__init_ and forward function have to be implemented
"""
def __init__(self):
super(LinearModel, self).__init__()
# torch.nn.Linear(in_features_size: int, out_features_size: int)
self.linear = torch.nn.Linear(1, 1)
def forward(self, x):
y_pred = self.linear(x)
return y_pred
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[2.0], [4.0], [6.0]])
model = LinearModel()
"""
torch.nn.MSELoss(size_average=False)
size_average: if calculate the loss average
size_average = True -> loss = 1/N * xxx
size_average = False -> loss = xxx
size_average only affect learning rate value
"""
criterion = torch.nn.MSELoss()
# model.parameters(): get all parameters of current model
# lr: learning rate
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
epoch_list = []
loss_list = []
for epoch in range(100):
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
print(epoch, loss)
epoch_list.append(epoch)
loss_list.append(loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
print("w=", model.linear.weight.item())
print("b=", model.linear.bias.item())
plt.plot(epoch_list, loss_list)
plt.xlabel('epoch')
plt.ylabel('Loss')
plt.show()
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred=', y_test.data)
结果显示: