线性模型实现
这里主要涉及代码实现部分,理论部分的内容较少
一维线性模型
思路:
1.得到训练数据画出原始图像,并将训练数据通过
torch.from_numpy
转换成Variable类型的变量;
定义参数w和b,并将参数设置成
requires_grad=True
,True说明反向传播时自动求导,而一般情况下该属性默认为False
2.构建参数模型即线性模型和损失函数
3.进行训练,训练过程中需要记得归零梯度
w.grad.zero_()
,利用
backward()
来自动求导,随后更新参数w和b
在进行训练的时候需要在循环外面先求一次导这样做的目的是
loss.backward()
先行,防止出现
AttributeError: 'NoneType' object has no attribute 'zero_'
的错误,或者在循环内先
loss.backward()
,随后再梯度归零。
总之是不可以让
w.grad.zero_()
放在前面
4.画图查看训练情况,这里画图需要注意将x_train、y_train和y_的类型进行转换
x_train.data.numpy()
。
实现的代码如下:
import torch
import numpy as np
from torch.autograd import Variable
import matplotlib
import matplotlib.pyplot as plt
# 数据
x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791],
[5.313], [7.997], [3.1]], dtype=np.float32)
y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], [3.366], [2.596], [2.53