- 1 安装pycharm,配置好python开发环境
- pycharm大致安装流程
- 安装完成后进入pycharm
- 安装配置python
- 2 安装pytorch
- 3 使用pytorch实现反向传播
- PyTorch Autograd自动求导
- 参考资料
1 安装pycharm,配置好python开发环境
安装并配置pycharm,参考链接PyCharm 安装教程
pycharm大致安装流程(由于安装完成后不小心重启电脑,博客也没有保存导致安装流程截图丢失)
(这里提醒大家写博客一定顺手保存)
如果我们之前没有安装python解释器的话,先去官网下载安装
下载python解释器
根据电脑所需版本号下载安装
安装完成后添加python到环境变量并查看能否使用
2 安装pytorch
查看驱动版本
版本后面就是对应的驱动版本号,查看对应cuda
pytorch官网
在终端跑对应命令
若官网给的命令不成功或者很慢的话可以把pip3修改为pip或者修改为国内镜像源
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 -i https://mirrors.aliyun.com/pypi/simple/
这里换的是阿里镜像。参考pip换源
3 使用pytorch实现反向传播import torch
x_data = [1.0, 2.0, 3.0] # 输入值
y_data = [2.0, 4.0, 6.0] # 输出值
w = torch.Tensor([1.0])
w.requires_grad = True
# 权重初始值(设置w的初始值),在grad求导时会将这里设置的初始值带入
# Tensor创建时默认不计算梯度,需要计算梯度设置为ture,自动记录求w的导
# y_predict = x * w
def forward(x):
return x * w
# 损失函数,return激活函数后得到的
def loss(x,y):
y_pred = forward(x)
return (y_pred - y) ** 2
# 训练过程
# 第一步:先算损失Loss
# 第二步:backward,反向传播
# 第三步:梯度下降
for epoch in range(100): #训练100次
for x, y in zip(x_data,y_data) :
l = loss(x,y) # 前向传播,求Loss(损失函数),构建计算图
l.backward() # 反向传播,求出计算图中所有梯度存入w中
print("tgrad: ",x,y,w.grad.item())
# w.grad.data:获取梯度,用data计算,不会建立计算图,每次获取叠加到grad
w.data = w.data - 0.01 * w.grad.data # 修正一次w,learningrate=0.01(类似步长
w.grad.data.zero_() # 注意:将w中记录的梯度清零,消除本次计算记录,只保留新的w,开启下一次前向传播
print("pregress:", epoch, l.item()) # item取元素精度更高,得到的是loss
运行结果
*** 如果错误提示torch不存在,可能是电脑中存在多个python编译器,切换到刚刚成功安装pytorch的python编译器即可。 ***
autograd包为张量上的所有操作提供了自动求导机制。
import torch #创建一个张量并设置requires_grad=True用来追踪其计算历史 x = torch.ones(2, 2, requires_grad=True) print(x) #对这个张量做一次运算: y = x + 2 print(y) print(y.grad_fn) #对y进行更多操作: z = y * y * 3 out = z.mean() print(z, out) #.requires_grad_(...) 原地改变了现有张量的 requires_grad 标志。如果没有指定的话,默认输入的这个标志是False''' a = torch.randn(2, 2) a = ((a * 3) / (a - 1)) print(a.requires_grad) a.requires_grad_(True) print(a.requires_grad) b = (a * a).sum() print(b.grad_fn) #梯度,因为out是一个标量。所以让我们直接进行反向传播,out.backward()和out.backward(torch.tensor(1.))等价 out.backward() #输出导数d(out)/dx print(x.grad)
运行结果
Pytorch实现反向传播
PyTorch Autograd自动求导



