PyTorchtensor和Tensor有什么区别?

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorchtensor和Tensor有什么区别?相关的知识,希望对你有一定的参考价值。

今天突然间想起来好久之前遇到的一个问题,虽然忘了具体的问题场景是啥了,但是最终的解决方案就是把用th.tensor创建张量换成了用th.Tensor创建张量,今天再来探究一下tensor和Tensor有什么区别?。

先看一下torch.tensortorch.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等类型。


根据根据使用需求,有几种主要的创建张量的方法:

  1. 要使用预先存在的数据创建一个张量,可以使用torch.tensor()
  2. 要创建特定大小的张量,可以使用torch.*张量创建操作;
  3. 要创建相同大小并且相同类型的张量,可以使用torch.*_like 张量创建操作;
  4. 要创建相同类型但是大小不同的张量,可以使用torch.new_* 张量创建操作;

以上是关于PyTorchtensor和Tensor有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

pytorch笔记: 处理inf和nan数值

PyTorch 中 tensor.permute 和 tensor.view 的区别?

Pytorch Tensor 如何获取特定值的索引

PyTorch内存模型:“torch.from_numpy()”vs“torch.Tensor()”

PyTorch 中的 index_select 和 tensor[sequence] 之间有啥区别吗?

深度学习---从入门到放弃pytorch基础