数据、代码等相关资料来源于b站日月光华老师视频,此博客作为学习记录。
1.输入数据的处理
2.创建模型
3.训练
4.预测、评价
接上文代码:
import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from torch import nn
data = pd.read_csv(r'E:\Code\pytorch\第2章\Income1.csv')
plt.scatter(data.Education, data.Income)
plt.xlabel('Education')
1. List item
plt.ylabel('Income')
plt.show()
X = torch.from_numpy(data.Education.values.reshape(-1, 1)).type(torch.FloatTensor)
Y = torch.from_numpy(data.Income.values.reshape(-1, 1)).type(torch.FloatTensor)
class EIModel(nn.Module):
def __init__(self):
super(EIModel,self).__init__()
self.linear = nn.Linear(in_features=1, out_features=1)
def forward(self, input):
logits = self.linear(input)
return logits
model = EIModel()
以均方误差作为回归的loss,在nn中调用,可看到:
建立损失函数和优化函数:
loss_fn = nn.MSELoss() # 定义损失函数
opt = torch.optim.SGD(model.parameters(), lr=0.0001) # 定义优化函数,优化权重和偏置使得输出与target越相似越好
# 随机梯度下降SGD
建立好的模型、损失函数和优化方法,对数据进行5000次迭代:
for epoch in range(5000): # 全部数据优化5000次
for x,y in zip(X,Y): # X,Y同时迭代
y_pred = model(x) # x被forward调用得到一个输出
loss = loss_fn(y_pred, y)
opt.zero_grad() # 优化时梯度会积累,在每个epoch内要求梯度清零
loss.backward() # 通过loss去反向传播,看参数是往什么方向移动
opt.step() # 损失优化参数
结果图: