2.7 使用PyTorch实现简单机器学习
2. 7 使用PyTorch实现简单机器学习本篇我们将使用PyTorch的一个自动求导的包——Antograd,利用这个包及对应的Tensor,利用自动反向求导传播来求梯度,无需手工计算梯度。以下是代码实现:
·
2.7 使用PyTorch实现简单机器学习
本篇我们将使用PyTorch的一个自动求导的包——Antograd,利用这个包及对应的Tensor,利用自动反向求导传播来求梯度,无需手工计算梯度。以下是代码实现:
# 1、导入需要的库
import torch
from matplotlib import pyplot as plt
# 2、生成训练数据,并可视化数据分布情况
torch.manual_seed(100)
# 生成x数据
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)
# 生成y数据,加上一些噪声
y = 3 * x.pow(2) + 2 + 0.2 * torch.rand(x.size())
# 画图,把tensor数据转换成numpy数据
plt.scatter(x.numpy(), y.numpy())
plt.show()
# 3、初始化权重参数
# 随机初始化参数,参数w,b需要学习,故需要把requires_grad=True
w = torch.randn(1, 1, dtype=torch.float, requires_grad=True)
b = torch.zeros(1, 1, dtype=torch.float, requires_grad=True)
# 4、训练模型
lr = 0.001 # 学习率
for i in range(800):
# 前向传播,并定义损失函数
y_pred = x.pow(2).mm(w) + b
loss = 0.5 * (y_pred-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_()
# 5、可视化训练结果
plt.plot(x.numpy(), y_pred.detach().numpy(), "r-", label='predict')
plt.scatter(x.numpy(), y.numpy(), color='blue', marker='o', label='true')
plt.xlim(-1, 1)
plt.ylim(2, 6)
plt.legend()
plt.show()
print(w, b)
w, b的预测结果:
tensor([[2.9645]], requires_grad=True) tensor([[2.1146]], requires_grad=True)
可视化结果如图
更多推荐
7日热学榜
活动日历
查看更多
活动时间 2025-01-01 00:00:00

丁奇:MySQL高频面试题详解
活动时间 2025-01-01 00:00:00

AI 大模型应用开发 · 实战营
活动时间 2025-01-01 00:00:00

AI系列课程-IT全学科自学科
活动时间 2025-01-01 00:00:00

3 小时掌握 Prompt 核心技巧与 GPT 技术理论
活动时间 2025-01-01 00:00:00

0基础2个月拿下软考高级证书体验课
所有评论(0)