PyTorch学习系列(四)——Tensor 和 Variable
程序员文章站
2022-07-12 23:08:40
...
Tensor
PyTorch中的Tensor本质上和numpy数组是一样的:Tensor是一个n维数组,并且PyTorch定义了关于Tensor的很多操作。并且Tensor和numpy一样,不知道深度学习、计算图和梯度的概念,它们都是通用的科学计算工具。但是和numpy不同的是,Torch可以利用GPU来加速数值计算。
Variable
如果用numpy或者Tensor来实现神经网络,需要手动写出前向过程和反向过程。对于简单的网络,反向过程中的导数容易求得,但是随着网络深度以及网络复杂度的增加,求出梯度的解析表达式是非常困难的。
PyTorch的包autograd提供了自动求导的功能。当使用autograd时,定义的前向网络会生成一个计算图:每个节点是一个Tensor,边表示由输入Tensor到输出Tensor的函数。沿着计算图的反向传播可以很容易地计算出梯度。
在实现的时候,用到了Variable对象。Variable对Tensor对象进行封装,只需要Variable::data即可取出Tensor,并且Variable还封装了该Tensor的梯度Variable::grad(是个Variable对象)。现在用Variable作为计算图的节点,则通过反向传播自动求得的导数就保存在Variable对象中了。
Variable提供了和Tensor一样的API,即能在Tensor上执行的操作也可以在Variable上执行。
定义:
神经网络的输入也是Variable类型的,但是并不需要对其求导。requires_grad控制着是否在反向传播过程中对该节点求梯度:
input = Variable(torch.randn(N, D_in).type(torch.TensorFloat), requires_grad=False)#默认值是False
参考
推荐阅读
-
Vue学习系列(四)——理解生命周期和钩子
-
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
-
Variable和Tensor合并后,PyTorch的代码要怎么改?
-
【pytorch】variable 和 tensor
-
PyTorch学习系列(四)——Tensor 和 Variable
-
(pytorch-深度学习系列)CNN的多输入通道和多输出通道
-
Netty4.0学习笔记系列之四:混合使用coder和handler
-
Vue学习系列(四)——理解生命周期和钩子
-
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
-
【PyTorch学习】分别使用Numpy和Tensor及Antograd实现机器学习