首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pytorch中张量torch.Size([])和torch.Size([1])的形状差异

pytorch中张量torch.Size([])和torch.Size([1])的形状差异
EN

Stack Overflow用户
提问于 2019-07-03 00:49:48
回答 3查看 9.6K关注 0票数 5

我是pytorch的新手。在玩张量的时候,我观察到了两种类型的张量-

代码语言:javascript
运行
复制
tensor(58)
tensor([57.3895])

我打印了它们的形状,输出分别是-

代码语言:javascript
运行
复制
torch.Size([])
torch.Size([1])

两者之间的区别是什么?

EN

回答 3

Stack Overflow用户

发布于 2019-07-03 01:02:59

第一个是0大小维度,第二个是1维度,PyTorch试图使这两个维度兼容(0大小可以被视为类似于float或a-like,尽管我还没有遇到明确需要它的情况,除了@javadr在下面的答案中显示的情况)。

不过,通常你会使用list来初始化它,使用see here获取更多信息。

票数 5
EN

Stack Overflow用户

发布于 2019-07-03 01:23:46

您可以使用具有单个标量值的张量,如下所示:

代码语言:javascript
运行
复制
import torch

t = torch.tensor(1)
print(t, t.shape) # tensor(1) torch.Size([])

t = torch.tensor([1])
print(t, t.shape) # tensor([1]) torch.Size([1])

t = torch.tensor([[1]])
print(t, t.shape) # tensor([[1]]) torch.Size([1, 1])

t = torch.tensor([[[1]]])
print(t, t.shape) # tensor([[[1]]]) torch.Size([1, 1, 1])

t = torch.unsqueeze(t, 0)
print(t, t.shape) # tensor([[[[1]]]]) torch.Size([1, 1, 1, 1])

t = torch.unsqueeze(t, 0)
print(t, t.shape) # tensor([[[[[1]]]]]) torch.Size([1, 1, 1, 1, 1])

t = torch.unsqueeze(t, 0)
print(t, t.shape) # tensor([[[[[[1]]]]]]) torch.Size([1, 1, 1, 1, 1, 1])

#squize dimension with id 0
t = torch.squeeze(t,dim=0)
print(t, t.shape) # tensor([[[[[1]]]]]) torch.Size([1, 1, 1, 1, 1])

#back to beginning.
t = torch.squeeze(t)
print(t, t.shape) # tensor(1) torch.Size([])

print(type(t)) # <class 'torch.Tensor'>
print(type(t.data)) # <class 'torch.Tensor'>

张量有一定的大小或形状。这是一样的。它实际上是一个类torch.Size。您可以编写help(torch.Size)来获取更多信息。任何时候你写t.shape,或者t.size(),你都会得到那个大小的信息。

张量的思想是,对于其中的数据,它们可以具有不同的兼容大小维度,包括torch.Size([])

任何时候你解压缩一个张量,它都会增加另一个维度1。任何时候你压缩一个张量,它都会去掉1的维度,或者在一般情况下,所有维度都是1。

票数 4
EN

Stack Overflow用户

发布于 2020-07-19 16:47:40

查看pytorch中的tensor文档

代码语言:javascript
运行
复制
Docstring:
tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False) -> Tensor

Constructs a tensor with :attr:`data`.

然后描述数据是什么:

代码语言:javascript
运行
复制
Args:
    data (array_like): Initial data for the tensor. Can be a list, tuple,
        NumPy ``ndarray``, scalar, and other types.

正如您所看到的,data可以是一个标量(这是一个维度为零的数据)。

因此,为了回答你的问题,tensor(58)是一个维度为0的张量,tensor([58])是一个维度为1的张量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56856996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档