线性回归pytorch实现笔记
本周首先学的是《动手学深度学习(pytorch版)》里面的线性回归的实现,但是有些东西看不懂,所以先在b站上找了两个简单的视频跟着学了一遍。
说是学了一遍,其实就是跟着视频敲了一遍代码。
实例一 【用 Pytorch 实现一个简单的线性回归】
课程来自:
PyTorch 从入门到精通(5)—用 Pytorch 实现一个简单的线性回归
先导入包和模块
import torch
import numpy as np
from tqdm import tqdm
我们给定样本集inputs和实际值targets
inputs = np.array( [[73,67,43],
[91,88,64],
[87,134,58],
[102,43,37],
[69,96,70]],dtype='float32')
targets = np.array([[56,70],
[81,101],
[119,133],
[22,37],
[103,119]],dtype='float32')
inputs_tensor = torch.from_numpy(inputs)
targets_tensor = torch.from_numpy(targets)
随机生成参数:权重和偏差
w = torch.randn(2, 3, requires_grad=True)
b = torch.randn(2, requires_grad=True)
# print(w)
# print(b)
看一下生成的随机参数
tensor([[-2.2122, 0.4708, -0.9458],
[ 1.6726, 1.2096, -0.2875]], requires_grad=True)
tensor([-0.1555, -0.4671], requires_grad=True)
建立线性回归的函数
def model(x):
return x @ w.t() + b
pred = model(inputs_tensor) # 预测结果
# print(pred)
预测结果pred的值为
tensor([[ 116.6629, -163.4659],
[ 148.9410, -221.4479],
[ 375.6723, -230.6700],
[ -30.1504, -168.7918],
[ 211.2514, -214.7471]], grad_fn=< AddBackward0 >)
显然pred和targets差的很远。
建立损失函数
# metric ()
def mse(pred, ground_truth):
diff = pred - ground_truth
return torch.sum(diff*diff) / diff.numel()
loss = mse(pred, targets_tensor) # 损失函数
# print(loss)
求梯度,迭代一次
loss.backward() # 反向传播
# print(w)
# print(w.grad)
w.grad.zero_()
b.grad.zero_()
# print(w.grad)
# print(b.grad)
with torch.no_grad(): # 这里不用求梯度
w -= w.grad * 1e-5
b -= b.grad * 1e-5
w.grad.zero_()
b.grad.zero_()
# print(w)