环境
优势在于可以即时运行,随时观察结果
1 | import torch |
基础知识
1 | # Vector |
tensor([1., 2., 3., 4.])
tensor([[11., 12.],
[21., 22.],
[31., 32.]])
1 | # Matrix |
线性回归
先看案例中的线性回归
Region | Temp.(F) | Rainfall(mm) | Humidity(%) | Apples(ton) | Oranges(ton) |
---|---|---|---|---|---|
Kanto | 73 | 67 | 43 | 56 | 70 |
Johto | 91 | 88 | 64 | 81 | 101 |
Hoenn | 87 | 134 | 58 | 119 | 133 |
Sinnoh | 102 | 43 | 37 | 22 | 37 |
Unova | 69 | 96 | 70 | 103 | 119 |
各地区因环境因素差异而造成苹果和橙子的产量差异
于是有以下线性回归方程用以预测水果产量,相对于不同水果,温度、降水、湿度分别予以不同的权重,外加一个偏差
$$yieldApple = w11 * temp + w12 * rainfall + w13 * humidity + b1$$
$$yieldOrange = w21 * temp + w22 * rainfall + w23 * humidity + b2$$
此刻,我们得到了
- 长度为5,宽度为3的输入
- 长度为5,宽度为2的输出
- 长度为3,宽度为2的权重
- 宽度为2的偏差
1 | # Input (temp, rainfall, humidity) |
\begin {pmatrix}
1 & a_1 & a_1^2 & \cdots & a_1^n \
1 & a_2 & a_2^2 & \cdots & a_2^n \
\vdots & \vdots& \vdots & \ddots & \vdots \
1 & a_m & a_m^2 & \cdots & a_m^n
\end {pmatrix}
所以我们定义模型
1 | def model(input): |
预测即为
1 | preds = model(inputs) |
这里的权重和偏移是随机生成的,所以预测结果合不上很正常
损失函数
1.计算preds和targets之间的差异
2.平方差矩阵所有元素以消除负值
3.计算结果矩阵中元素的平均值
最终结果为均方误差MSE
1 | # MSE loss |
计算梯度
1 | # Compute gradients |
计算权重梯度
1 | # Gradients for weights |
重置梯度
1 | # Reset the gradients |
- 生成预测
- 计算损失
- 计算梯度w.r.t权重和偏差
- 通过减去与梯度成比例的小量来调整权重
- 将渐变重置为零
1 | # Train for 100 epochs |
总结
创建TensorDataset和DataLoader
1 | from torch.utils.data import TensorDataset |
1 | class Net(nn.Module): |