Pytorch入门-Tensor、Variable和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.Tensor是默认的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 兼容性

VariableAPI 几乎和 Tensor API一致 (除了一些in-place方法,这些in-place方法会修改required_grad=Trueinput 的值)。多数情况下,将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.
VariableTensor对象的一个thin wrapper,它同时保存着Variable梯度和创建这个VariableFunction的引用。这个引用可以用来追溯创建这个Variable的整条链。如果Variable是被用户所创建的,那么它的creatorNone,我们称这种对象为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值