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

1.8.2 使用Tensor及autograd实现 机器学习(梯度下降法)

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

1.8.2 使用Tensor及autograd实现 机器学习(梯度下降法)

import numpy as np
from matplotlib import pyplot as plt
import torch

torch.manual_seed(100)
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)
y = 3 * x.pow(2) + 2 + 0.2 * torch.rand(x.size())

# plt.scatter(x.numpy(), y.numpy())
# plt.show()

# w, b 需要学习,需设置参数 requires_grad=True
w = torch.rand(1, 1, dtype=torch.float, requires_grad=True)
b = torch.zeros(1, 1, dtype=torch.float, requires_grad=True)
# print(w1)   # tensor([[0.6017]])
# print(b1)   # tensor([[0.]])

lr = 0.001
for i in range(800):
    # 损失函数, 只作为收敛的观察,不参与后续的计算
    y_predict = w * np.power(x, 2) + b
    loss = 0.5 * (y_predict - y) ** 2
    loss = loss.sum()

    # 自动计算梯度,梯度存放在grad属性中
    loss.backward()

    # 手动更新参数,需要用 torch.no_grad, 使上下文环境中切段自动求导的计算
    with torch.no_grad():
        w -= lr * w.grad
        b -= lr * b.grad

    # 梯度清零
    w.grad.zero_()
    b.grad.zero_()

plt.plot(x.numpy(), y_predict.detach().numpy(), 'r-', label='predict')
plt.scatter(x, y, color='blue', marker='o', label='true')
plt.xlim(-1, 1)
plt.ylim(2, 6)
plt.legend()
plt.show()
print(w, b)

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

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

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