1-珍爱生命,远离tensorflow
今天学习pytorch的使用,参考Pytorch深度学习:60分钟快速入门 、PyTorch中关于backward、grad、autograd的计算原理的深度剖析,PyTorch中的nn.Conv1d与nn.Conv2d等文章。
一、pytorch安装以及在pycharm中使用pytorch
首先确定自己的显卡型号,右键点击开始,打开设备管理器,看看你的显卡。根据显卡信息,打开https://pytorch.org/,往下滑根据你的情况查找安装命令。找到命令后,开始安装。

我是从cmd,用pip下载清华源的资源(可以直接在pycharm的terminal里下载,但是我的出了问题,解决不了,就从cmd下载了)。把你需要的全部下载。下载完输入python,import torch试试。
pip install torch –i https://pypi.tuna.tsinghua.edu.cn/simple
在pychram里使用,点开 file > settings

选择 python Interpreter,再点击+

在搜索框内搜索需要的 ,点击下方的Install package

然后就可以在pycharm里使用torch(或者你下载的东西)了。
二、基础方法
Tensor:即张量。
Varibale:torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现。Varibale包含三个属性:
- data: 即存储的数据信息。
- .grad(): 保存了data的梯度,grad本身也是个Variable而非Tensor,与data形状一致, 每次在计算backward时都需要将前一时刻的梯度归零,否则梯度值会一直累加。
- grad_fn: 指示梯度函数是哪种类型,用于反向传播的梯度计算之用。如果变量是通过一个操作创建的(这里的操作指的是任意操作,比如y = x + 2,则y是通过一个操作创建的),它就会有grad_fn,如果是由用户创建(自己定义的,比如x = Variable(torch.ones(2, 2), requires_grad=True)),则它的grad_fn为None。volatile==True 就等价于 requires_grad==False。
三、梯度
如果我们需要计算某个Tensor的导数,那么我们需要设置其参数.requires_grad属性为True。当设置.requires_grad为True,程序将会追踪所有对于该张量的操作,当完成计算后通过调用.backward() ,自动计算所有的梯度, 所有梯度将会自动积累到.grad 属性。
import torch
from torch.autograd import Variable
x = Variable(torch.ones(2, 2), requires_grad=True)
print(x)
#结果
tensor([[1., 1.],
[1., 1.]], requires_grad=True)
.backward()方法来自动计算所有的梯度,用于做反向传播
选出最佳模型的方式,其实就是利用梯度下降算法,选出损失函数最小的那个。在传统的机器学习当中,这个比较容易,直接算就行了。但是在深度学习当中,由于存在输入层,隐藏层,输出层,且隐藏层到底有多深,这些都是未知数,因此计算也会更加繁杂。
如果,在输出层输出的数据和我们设定的目标以及标准相差比较大,这个时候,就需要反向传播。利用反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯度,之所以算这个,是为了对权值的优化提供依据,等权值优化了之后,再转为正向传播……当输出的结果达到设定的标准时,算法结束
torch.autograd.backward(
tensors,
grad_tensors=None,
retain_graph=None,
create_graph=False,
grad_variables=None)
参数说明:
1. tensors:用于计算梯度的tensor。
2. grad_tensors:在计算矩阵的梯度时会用到。grad_tensors其实也是一个tensor,它的shape一般需要和前面的tensor保持一致。引入参数grad_tensors可以解决欲求导的Tensor是非标量的情况(如果Tensor是 非标量,则需要指定一个gradient参数,它是形状匹配的张量)。
当前Variable(理解成函数Y)对leaf variable(理解成变量X=[x1,x2,x3])求偏导。
计算图可以通过链式法则求导。如果Variable是 非标量(non-scalar)的(即:Y中有不止一个y,即Y=[y1,y2,…]),且requires_grad=True。那么此函数需要指定gradient,它的形状应该和Variable的长度匹配(这个就很好理解了,gradient的长度体与Y的长度一直才能保存每一个yi的梯度值),里面保

本文是一篇关于PyTorch学习的实习记录,从珍爱生命的口号开始,介绍了如何安装PyTorch并在PyCharm中配置。接着详细讲解了PyTorch的基础,包括Tensor、Variable和梯度计算,以及神经网络的构建,如数据导入、模型定义、损失函数和优化器。最后,作者分享了训练和测试神经网络的过程。
&spm=1001.2101.3001.5002&articleId=126481271&d=1&t=3&u=f22b78fd6a65460cb3f1628b1ce77d7b)
3647

被折叠的 条评论
为什么被折叠?



