目录
1.背景及思路2.pytorch全套代码3.展示pytorch绘制的图像(epoch-loss)
1.背景及思路
【思想】 1.使用梯度下降是可以解决大多数问题的,但是遇到“鞍点”问题无法解决。 2.使用梯度下降更新权重w的时候,对于每一个w,计算cost损失、计算梯度的时候,都要对所有样本[x1,y1]、[x2, y2]……[xn,yn]求cost损失和梯度的均值。实际上我们最主要的目标是找到最接近的w的值,只要多训练几次,对于cost和梯度取不取均值,没有太大区别。所以没有必要把计算时间都浪费在cost和梯度的均值上。所以引入随机梯度。 3.即:第一次用[x1,y1]这组数据计算梯度、更新w;第二次用[x2,y2]这组数据计算梯度、更新w……以此类推,每次随机抽取的用来计算梯度的样本[xn,yn]不是固定的,所以叫做随机梯度下降。
2.pytorch全套代码
import matplotlib
.pyplot
as plt
x_data
= [1.0, 2.0, 3.0]
y_data
= [2.0, 4.0, 6.0]
w
= 1.0
def forward(x
):
return x
* w
def loss(x
, y
):
y_pred
= forward
(x
)
return (y_pred
- y
) ** 2
def gradient(xs
, ys
):
return 2 * x
* (x
* w
- y
)
epoch_list
= []
cost_list
= []
print ('Predict (before training)', 4 , forward
(4))
for epoch
in range(100):
for x
, y
in zip(x_data
, y_data
):
grad
= gradient
(x
, y
)
w
= w
- 0.01 * grad
print("\t x=", x
, "y=", y
, "grade:", grad
)
l
= loss
(x
, y
)
print(' Epoch:', epoch
, ' w=', w
, ' loss=', l
)
epoch_list
.append
(epoch
)
cost_list
.append
(l
)
print('Predict (after training)', 4, forward
(4))
plt
.plot
(epoch_list
, cost_list
)
plt
.ylabel
('cost')
plt
.xlabel
('epoch')
plt
.show
()
3.展示pytorch绘制的图像(epoch-loss)
从图中可以发现,当训练epoch次数增加的时候,损失值会越来越小。 此时打印4 和forward(4),就会得到forward(4)的值接近于8。所以权重w=y/x=2