Tensor与Variable
- 1.Tensor
- 2.Variable
-
- 2.1.API 兼容性
- 2.2.in-place 正确性检查
- 2.3.class torch.autograd.Variable [source]
- 2.4.backward(gradient=None, retain_variables=False)[source]
- 2.5.detach()[source]
- 2.6.register_hook(hook)[source]
- 2.7.reinforce(reward)[source]
- 2.8.class torch.autograd.Function[source]
- 2.9.backward(* grad_output)[source]
- 2.10.forward(* input)[source]
- 2.11.mark_dirty(* args)[source]
- 2.12.mark_non_differentiable(* args)[source]
- 2.13.mark_shared_storage(* pairs)[source]
- 2.14.save_for_backward(* tensors)[source]
- 3.Tensor 与Variable的区别和联系
- 4.Parameter
1.Tensor
torch.Tensor
是一种包含单一数据类型元素的多维矩阵。
Torch定义了七种CPU tensor类型和八种GPU tensor类型:
Data type | CPU tensor | GPU tensor |
---|---|---|
-32-bit floating point | torch.FloatTensor | torch.cuda.FloatTensor |
64-bit floating point | torch.DoubleTensor | torch.cuda.DoubleTensor |
16-bit floating point | N/A | torch.cuda.HalfTensor |
8-bit integer (unsigned) | torch.ByteTensor | torch.cuda.ByteTensor |
8-bit integer (signed) | torch.CharTensor | torch.cuda.CharTensor |
16-bit integer (signed) | torch.ShortTensor | torch.cuda.ShortTensor |
32-bit integer (signed) | torch.IntTensor | torch.cuda.IntTensor |
64-bit integer (signed) | torch.LongTensor | torch.cuda.LongTensor |
torch.Tenso r是默认的tensor类型(torch.FlaotTensor )的简称。 |
每一个张量tensor都有一个相应的torch.Storage
用来保存其数据。类tensor提供了一个存储的多维的、横向视图,并且定义了在数值运算。
注意: 会改变tensor的函数操作会用一个下划线后缀来标示。比如,torch.FloatTensor.abs_()
会在原地计算绝对值,并返回改变后的tensor,而tensor.FloatTensor.abs()
将会在一个新的tensor中计算结果
更多关于Tensor的操作
1.1.expand(*sizes)
返回tensor的一个新视图,单个维度扩大为更大的尺寸。 tensor也可以扩大为更高维,新增加的维度将附在前面。 扩大tensor不需要分配新内存,只是仅仅新建一个tensor的视图,其中通过将stride
设为0,一维将会扩展位更高维。任何一个一维的在不分配新内存情况下可扩展为任意的数值。
- 参数:
sizes(torch.Size or int...)
-需要扩展的大小
1.2.unfold(dim, size, step) → Tensor
返回一个tensor,其中含有在dim
维度填充上所有大小为size
的分片。两个分片之间的步长为step
。 如果_sizedim_是dim
维度的原始大小,则在返回tensor中的维度dim大小是_(sizedim-size)/step+1_ 维度大小的附加维度将附加在返回的tensor中。
- 参数:
dim (int)
-需要展开的维度
size (int)
-每一个分片需要展开的大小 - step (int)-相邻分片之间的步长
1.3.index_add_(dim, index, tensor) → Tensor
按参数index
中的索引数确定的顺序,将参数tensor中的元素加到原来的tensor中。参数tensor的尺寸必须严格地与原tensor匹配,否则会发生错误。
- 参数:
dim(int)
-索引index所指向的维度
index(LongTensor)
-需要从tensor中选取的指数
tensor(Tensor)
-含有相加元素的tensor
1.4.view(*args) → Tensor
返回一个有相同数据但大小不同的tensor。 返回的tensor必须有与原tensor相同的数据和相同数目的元素,但可以有不同的大小。一个tensor必须是连续的contiguous()
才能被查看。
2.Variable
2.1.API 兼容性
Variable
API 几乎和 Tenso
r API一致 (除了一些in-place
方法,这些in-place
方法会修改required_grad=True
的 input
的值)。多数情况下,将Tensor
替换为Variable
,代码一样会正常的工作。
2.2.in-place 正确性检查
所有的Variable
都会记录用在他们身上的in-place operations
。如果pytorch
检测到variable
在一个Function
中已经被保存用来backward
,但是之后它又被in-place operations
修改。当这种情况发生时,在backward
的时候,pytorch
就会报错。这种机制保证了,如果你用了in-place operations
,但是在backward
过程中没有报错,那么梯度的计算就是正确的。
2.3.class torch.autograd.Variable [source]
包装一个Tensor
,并记录用在它身上的operations
.
Variable
是Tensor
对象的一个thin wrapper
,它同时保存着Variable
的梯度和创建这个Variable
的Function的引用。这个引用可以用来追溯创建这个Variable
的整条链。如果Variable
是被用户所创建的,那么它的creator
是None
,我们称这种对象为leaf Variables
。
由于autograd
只支持标量值的反向求导(即:y是标量),梯度的大小总是和数据的大小匹配。同时,仅仅给leaf variables
分配梯度,其他Variable的梯度总是为0.
-
变量:
data
– 包含的Tensor
grad
– 保存着Variable的
梯度。这个属性是默认分配的,且不能被重新分配。
requires_grad
– 布尔值,指示这个Variable
是否是被一个包含Variable的
子图创建的。更多细节请看Excluding subgraphs from backward
。只能改变leaf variable
的这个标签。
volatile
– 布尔值,指示这个Variable
是否被用于推断模式(即,不保存历史信息)。更多细节请看Excluding subgraphs from backward
。只能改变leaf variable的
这个标签。
creato