【pytorch深度学习实践】笔记—03.2.随机梯度下降

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)


# 最终绘制图像的x
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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_38068876/article/details/108396360
今日推荐