赞
踩
深度学习并没有想象的那么难,甚至比有些传统的机器学习更简单。所用到的数学知识也不需要特别的高深。这篇文章将利用PyTorch来实现线性回归这个经典的模型。
线性回归时利用数理统计中的回归分析来确定两种或者两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
简单的说: 线性回归对于输入x与输出y有一个映射f,y=f(x),而f的形式为aX+b。其中a和b是两个可调的参数,我们训练的目的就是训练a,b这两个参数。
下面我们来用pyTorch的代码来做一个详细的解释
# 注意,这里我们使用了一个新库叫 seaborn 如果报错找不到包的话请使用pip install seaborn 来进行安装
import torch
from torch.nn import Linear, Module, MSELoss
from torch.optim import SGD
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
torch.__version__
x = np.linspace(0,20,500)
y = 5*x + 7
plt.plot(x,y)
x = np.random.rand(256)
noise = np.random.randn(256) / 4
y = x * 5 + 7 + noise
df = pd.DataFrame()
df['x'] = x
df['y'] = y
sns.lmplot(x='x', y='y', data=df)
model=Linear(1, 1)
其中参数(1, 1)代表输入输出的特征(feature)数量都是1. Linear 模型的表达式是 y = w ⋅ x + b y=w \cdot x+b y=w⋅x+b,其中 w w w 代表权重, b b b 代表偏置
criterion = MSELoss()
optim = SGD(model.parameters(), lr = 0.01)
epochs = 3000
x_train = x.reshape(-1, 1).astype('float32')
y_train = y.reshape(-1, 1).astype('float32')
for i in range(epochs): # 整理输入和输出的数据,这里输入和输出一定要是torch的Tensor类型 inputs = torch.from_numpy(x_train) labels = torch.from_numpy(y_train) #使用模型进行预测 outputs = model(inputs) #梯度置0,否则会累加 optim.zero_grad() # 计算损失 loss = criterion(outputs, labels) # 反向传播 loss.backward() # 使用优化器默认方法优化 optim.step() if (i%100 == 0): #每 100次打印一下损失函数,看看效果 print('epoch {}, loss {:1.4f}'.format(i,loss.data.item()))
[w, b] = model.parameters()
print (w.item(),b.item())
predicted = model.forward(torch.from_numpy(x_train)).data.numpy()
plt.plot(x_train, y_train, 'go', label = 'data', alpha = 0.3)
plt.plot(x_train, predicted, label = 'predicted', alpha = 1)
plt.legend()
plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。