相关疑难解决方法(0)

连续和非连续数组之间有什么区别?

在关于reshape()函数的numpy手册中,它说

>>> a = np.zeros((10, 2))
# A transpose make the array non-contiguous
>>> b = a.T
# Taking a view makes it possible to modify the shape without modifying the
# initial object.
>>> c = b.view()
>>> c.shape = (20)
AttributeError: incompatible shape for a non-contiguous array
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 什么是连续和不连续的数组?它是否类似于C中的连续内存块,比如什么是连续的内存块?
  2. 这两者之间有任何性能差异吗?我们什么时候应该使用其中一种?
  3. transpose为什么使数组不连续?
  4. 为什么c.shape = (20)抛出错误incompatible shape for a non-contiguous array

感谢您的回答!

python memory arrays numpy

73
推荐指数
2
解决办法
4万
查看次数

PyTorch - 连续()

我在github上看到了这个LSTM语言模型的例子(链接).它一般来说对我来说非常清楚.但是我仍然在努力理解调用的内容contiguous(),这在代码中会多次发生.

例如,在代码输入的第74/75行中,创建LSTM的目标序列.数据(存储在其中ids)是二维的,其中第一维是批量大小.

for i in range(0, ids.size(1) - seq_length, seq_length):
    # Get batch inputs and targets
    inputs = Variable(ids[:, i:i+seq_length])
    targets = Variable(ids[:, (i+1):(i+1)+seq_length].contiguous())
Run Code Online (Sandbox Code Playgroud)

举个简单的例子,当使用批量大小为1和seq_length10时inputs,targets看起来像这样:

inputs Variable containing:
0     1     2     3     4     5     6     7     8     9
[torch.LongTensor of size 1x10]

targets Variable containing:
1     2     3     4     5     6     7     8     9    10
[torch.LongTensor of size 1x10]
Run Code Online (Sandbox Code Playgroud)

所以一般来说我的问题是,contiguous()我需要什么以及为什么需要它?

此外,我不明白为什么该方法被调用目标序列而不是输入序列,因为两个变量都包含相同的数据.

怎么可能targetsinputs不连续的,仍然是连续的? …

neural-network contiguous deep-learning lstm pytorch

52
推荐指数
6
解决办法
3万
查看次数

Pytorch重塑张量维度

例如,我有1维向量的维度(5).我想将其重塑为2D矩阵(1,5).

这是我如何用numpy做的

>>> import numpy as np
>>> a = np.array([1,2,3,4,5])
>>> a.shape
(5,)
>>> a = np.reshape(a, (1,5))
>>> a.shape
(1, 5)
>>> a
array([[1, 2, 3, 4, 5]])
>>> 
Run Code Online (Sandbox Code Playgroud)

但是我怎么能用Pytorch Tensor(和Variable)做到这一点.我不想切换回numpy并再次切换到Torch变量,因为它会丢失反向传播信息.

这就是我在Pytorch中所拥有的

>>> import torch
>>> from torch.autograd import Variable
>>> a = torch.Tensor([1,2,3,4,5])
>>> a

 1
 2
 3
 4
 5
[torch.FloatTensor of size 5]

>>> a.size()
(5L,)
>>> a_var = variable(a)
>>> a_var = Variable(a)
>>> a_var.size()
(5L,)
.....do some calculation in forward function
>>> a_var.size()
(5L,) …
Run Code Online (Sandbox Code Playgroud)

python numpy deep-learning pytorch tensor

27
推荐指数
7
解决办法
7万
查看次数

PyTorch 中的 .flatten() 和 .view(-1) 有什么区别?

双方.flatten().view(-1)压平PyTorch张量。有什么不同?

  1. 是否.flatten()复制张量的数据?
  2. .view(-1)更快吗?
  3. .flatten()没有不工作的情况?

python pytorch

19
推荐指数
2
解决办法
7204
查看次数

在 PyTorch 中,是什么使张量具有非连续内存?

根据这个SO这个PyTorch讨论,PyTorch的view功能仅适用于连续内存,而reshape不能。在第二个链接中,作者甚至声称:

[ view] 将在非连续张量上引发错误。

但是张量什么时候有非连续内存呢?

pytorch

7
推荐指数
1
解决办法
4624
查看次数

How do I flatten a tensor in pytorch?

Given a tensor of multiple dimensions, how do I flatten it so that it has a single dimension?

Eg:

>>> t = torch.rand([2, 3, 5])
>>> t.shape
torch.Size([2, 3, 5])
Run Code Online (Sandbox Code Playgroud)

How do I flatten it to have shape:

torch.Size([30])
Run Code Online (Sandbox Code Playgroud)

pytorch

7
推荐指数
3
解决办法
1万
查看次数

在Pytorch(1.0)中具有类似外观的不同`grad_fn`

我正在开发一个注意力模型,在运行最终模型之前,我正在遍历代码的张量形状。我有一个需要重整张量的操作。张量是形状的torch.Size([[30, 8, 9, 64]]) 地方30batch_size8是(这是不相关的我的问题)注意头的数量9是在一句话的数量,64这个词的一些中间嵌入表示。torch.size([30, 9, 512])在进一步处理之前,我必须将张量重塑为的大小。因此,我在网上查找一些参考资料,他们做了以下工作,x.transpose(1, 2).contiguous().view(30, -1, 512) 而我认为这应该可行x.transpose(1, 2).reshape(30, -1, 512)

在第一种情况下是grad_fnis <ViewBackward>,而在我的情况下是<UnsafeViewBackward>。这两个操作不一样吗?这会导致训练错误吗?

python attention-model pytorch

5
推荐指数
1
解决办法
219
查看次数