栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

B站刘二大人-反向传播

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

B站刘二大人-反向传播


系列文章:
B站刘二大人-线性回归及梯度下降


文章目录
    • 代码


代码
import matplotlib.pyplot as plt
import  torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# w是张量且设置了梯度跟踪
w = torch.Tensor([1.0])
w.requires_grad = True
print("w=",w)
def forward(x):
    return x*w
# 单个数据的损失函数
def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y)*(y_pred-y)
# 学习率
alpha = 0.001
epoch_list = []
w_list = []
loss_list = []
for epoch in range(100):
    l = 0
    loss_sum = 0
    for (x ,y) in zip(x_data, y_data):
        # l, loss_sum都是张量,无梯度跟踪
        l = loss(x,y)
        loss_sum += l.data
        # 我的疑问:反向传播、梯度更新进行了epoch*len(x_data),
        # 为什么不能进行epoch次。
        l.backward()
        w.data = w.data - alpha*w.grad.data
        w.grad.data.zero_()
    w_list.append(w.data)
    epoch_list.append(epoch)
    # 获取张量上的值需要转换为numpy
    loss_list.append(loss_sum.data.numpy()[0])
plt.plot(epoch_list, loss_list)
plt.xlabel("epoch")
plt.ylabel("loss_sum")
plt.show()

反向传播、梯度更新进行lepoch次的代码

import matplotlib.pyplot as plt
import  torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# w是张量且设置了梯度跟踪
w = torch.Tensor([1.0])
w.requires_grad = True
print("w=",w)
def forward(x):
    return x*w
# 单个数据的损失函数
def loss(xs, ys):
    # y_pred = forward(x)
    # return (y_pred - y)*(y_pred-y)
    loss_sum = 0
    for(x, y) in zip(xs, ys):
        y_pred = forward(x)
        loss_sum += (y_pred-y)*(y_pred-y)
    return  loss_sum/len(xs)
# 学习率
alpha = 0.001
epoch_list = []
w_list = []
loss_list = []
# 进行epoch次梯度更新、损失函数计算
for epoch in range(100):
    # 计算所有数据的损失函数
    l = loss(x_data, y_data)
    l.backward()
    # 梯度更新
    w.data = w.data - alpha * w.grad.data
    w.grad.data.zero_()
    w_list.append(w.data)
    epoch_list.append(epoch)
    loss_list.append(l.data.numpy()[0])
plt.plot(epoch_list, loss_list)
plt.xlabel("epoch")
plt.ylabel("loss_sum")
plt.show()


两种方式跑出来的图在 损失下降率、结果有一定的差别。
目前我也有疑问,不知道那种合适。
B站老师写的是第一个代码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001077.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号