PyTorchtensor和Tensor有什么区别?
Posted Alex_996
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorchtensor和Tensor有什么区别?相关的知识,希望对你有一定的参考价值。
今天突然间想起来好久之前遇到的一个问题,虽然忘了具体的问题场景是啥了,但是最终的解决方案就是把用
th.tensor
创建张量换成了用th.Tensor
创建张量,今天再来探究一下tensor和Tensor有什么区别?。
先看一下torch.tensor和torch.Tensor的官方文档。
torch.Tensor
首先torch.Tensor
是一个类,是包含单一数据类型元素的多维矩阵。更明确地说,它是默认张量类型torch.FloatTensor()
的别名。
也就是说,torch.Tensor() 的作用实际上跟 torch.FloatTensor() 一样,都是生成一个数据类型为 32 位浮点数的张量,如果没传入数据就返回空张量,如果有列表或者 narray 的返回其对应张量。
正因为 torch.Tensor 只包含单一的数据类型,所以后面文档就列出了不同数据类型对应的不同 Tensor。
torch.tensor
torch.tensor
是一个构造函数,通过复制输入数据来构建一个没有自动微分记录的张量(也成为叶张量)。
函数原型:
torch.tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False) → Tensor
可以发现data参数是必须要传的,如果想要生成空张量,也要传入一个空列表,data参数的类型可以是:list, tuple, NumPy ndarray, scalar和其他类型。
torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor、torch.FloatTensor和torch.DoubleTensor等类型。
根据根据使用需求,有几种主要的创建张量的方法:
- 要使用预先存在的数据创建一个张量,可以使用
torch.tensor()
; - 要创建特定大小的张量,可以使用
torch.*
张量创建操作; - 要创建相同大小并且相同类型的张量,可以使用
torch.*_like
张量创建操作; - 要创建相同类型但是大小不同的张量,可以使用
torch.new_*
张量创建操作;
以上是关于PyTorchtensor和Tensor有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
PyTorch 中 tensor.permute 和 tensor.view 的区别?
PyTorch内存模型:“torch.from_numpy()”vs“torch.Tensor()”