- 读取数据
#%%import torch#%%import pandas as pd
import numpy as np
import matplotlib.pyplot as plt#%%data = pd.read_csv('./daatset/Income1.csv')#%%data
- 展示数据
plt.scatter(data.Education, data.Income)
plt.xlabel('Education')
plt.ylabel('Income')
-
数据格式转换
#%%
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)
- 创建一个线性回归模型
#%% 参数是 输入维度 1 输出维度 1from torch import nn
model = nn.Linear(1, 1)
- 误差函数 (损失函数)
loss_fn = nn.MSELoss()
- 优化函数(梯度下降)
opt = torch.optim.SGD(model.parameters(), lr=0.0001)
-
进行反向传播
for epoch in range(5000):for x, y in zip(X, Y):y_pred = model(x)loss = loss_fn(y, y_pred) # 通过损失函数计算损失opt.zero_grad() # 将所有梯度清零,梯度会累积loss.backward() # 根据loss值计算梯度opt.step() # 进行梯度更新
损失函数是固定的,梯度变化不是跟 损失函数关于输入特征的导数 相关的
梯度 与 loss值的变换幅度相关
以上是高度封装的函数
- 模型及结果展示
#%%model.weight#%%model.bias#%%plt.scatter(data.Education, data.Income)
plt.plot(X.numpy(), model(X).data.numpy(), c='r')
plt.show()