标签: tensor

将函数元素应用于Pytorch CUDA Tensor的并行方法

假设我有一个火炬CUDA张量,我想应用一些函数,sin()但我明确定义了该函数F.如何F在Pytorch中使用并行计算.

gpu torch pytorch tensor

8
推荐指数
1
解决办法
1654
查看次数

是否有任何pytorch函数可以将张量的特定连续维度合二为一?

让我们调用我正在寻找的函数“ magic_combine”,它可以组合我给它的张量的连续维度。更具体地说,我希望它做以下事情:

a = torch.zeros(1, 2, 3, 4, 5, 6)  
b = a.magic_combine(2, 5) # combine dimension 2, 3, 4 
print(b.size()) # should be (1, 2, 60, 6)
Run Code Online (Sandbox Code Playgroud)

我知道torch.view()可以做类似的事情。但我只是想知道是否有更优雅的方式来实现目标?

python deep-learning pytorch tensor

8
推荐指数
3
解决办法
7982
查看次数

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

tensor.permute()和之间有什么区别tensor.view()

他们似乎做同样的事情。

python multidimensional-array deep-learning pytorch tensor

8
推荐指数
2
解决办法
6537
查看次数

在PyTorch中使用张量索引多维张量

我有以下代码:

a = torch.randint(0,10,[3,3,3,3])
b = torch.LongTensor([1,1,1,1])
Run Code Online (Sandbox Code Playgroud)

我有一个多维索引,b并希望用它来选择一个单元格a.如果b不是张量,我可以这样做:

a[1,1,1,1]
Run Code Online (Sandbox Code Playgroud)

哪个返回正确的单元格,但是:

a[b]
Run Code Online (Sandbox Code Playgroud)

不起作用,因为它只选择了a[1]四次.

我怎样才能做到这一点?谢谢

pytorch tensor

8
推荐指数
2
解决办法
5771
查看次数

Pytorch 0.4.0:在CUDA设备上有三种方法可以创建张量.它们之间有什么区别吗?

我以第三种方式失败了.t3还在CPU上.不知道为什么.

a = np.random.randn(1, 1, 2, 3)

t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))

t2 = torch.tensor(a)
t2 = t2.cuda() 

t3 = torch.tensor(a, device=torch.device('cuda'))
Run Code Online (Sandbox Code Playgroud)

pytorch tensor

8
推荐指数
1
解决办法
2791
查看次数

如何有效地计算 PyTorch 中的批量成对距离

我有形状的张量 X 和形状的BxNxDY BxNxD

我想计算批次中每个元素的成对距离,即我是一个BxMxN张量。

我该怎么做呢?

这里有一些关于这个话题的讨论:https : //github.com/pytorch/pytorch/issues/9406,但我不明白,因为有很多实现细节,而没有突出显示实际的解决方案。

一种天真的方法是使用此处讨论的非批量成对距离的答案:https : //discuss.pytorch.org/t/efficient-distance-matrix-computation/9065,即

import torch
import numpy as np

B = 32
N = 128
M = 256
D = 3

X = torch.from_numpy(np.random.normal(size=(B, N, D)))
Y = torch.from_numpy(np.random.normal(size=(B, M, D)))


def pairwise_distances(x, y=None):
    x_norm = (x**2).sum(1).view(-1, 1)
    if y is not None:
        y_t = torch.transpose(y, 0, 1)
        y_norm = (y**2).sum(1).view(1, -1)
    else:
        y_t = torch.transpose(x, 0, 1)
        y_norm = x_norm.view(1, -1) …
Run Code Online (Sandbox Code Playgroud)

deep-learning pytorch tensor

8
推荐指数
1
解决办法
2554
查看次数

Pytorch/ATen C++中切片张量的等价性

在给定二维张量的 Python 中,我们可以使用tensor[:,:2]对矩阵左上角前两个元素的 2x2 矩阵进行切片,例如:

x = torch.tensor([[-1.4673,  0.9980, -2.1427, -1.1798, -0.0646, -0.2635, -2.8930, -0.2563,
          0.4559, -0.7947, -0.4540,  3.3224,  0.2295,  5.5568, -8.0451, -2.4529,
          4.8724,  2.1640,  3.3255,  0.6693, -1.2362,  4.4713, -3.5547, -0.0528,
          0.1031, -1.2472, -1.6014,  1.8134],
        [ 2.1636, -1.1497, -5.0298,  2.8261, -0.5684,  0.6389,  2.9009, -5.1609,
          1.7358, -3.1819, -0.9877,  5.5598,  6.7142,  4.5704, -1.2683, -5.3046,
          3.0454,  3.2757, -3.2541,  3.6619, -3.6391, -0.2002,  5.7175,  5.7130,
          0.6632, -0.0744, -0.3502,  4.8116]])

y, z = x[:,:2].chunk(2,1)

print(y)

print(z)
Run Code Online (Sandbox Code Playgroud)

[出去]:

tensor([[-1.4673],
        [ 2.1636]])
tensor([[ 0.9980],
        [-1.1497]])
Run Code Online (Sandbox Code Playgroud)

特别是在 …

c++ pytorch tensor libtorch

8
推荐指数
2
解决办法
3100
查看次数

计算多维火炬张量中向量之间的欧氏距离

有一个随机初始化的火炬张量,其形状如下。

输入

tensor1 = torch.rand((4,2,3,100))
tensor2 = torch.rand((4,2,3,100))
Run Code Online (Sandbox Code Playgroud)

tensor1tensor2分别是具有 24 100 维向量的火炬张量。

torch.size([4,2,3])我想通过获得具有相同索引的两个张量的向量之间的欧几里德距离来获得形状为 的张量。

我曾经dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)得到过我想要的结果。

但是,该pairwise_distance函数计算张量第二维的欧几里德距离。所以dist形状是torch.size([4,3,100])

我已经执行了几次转置来解决这些问题。我的代码如下。

tensor1 = tensor1.transpose(1,3)
tensor2 = tensor2.transpose(1,3)
dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)
dist = dist.transpose(1,2)
Run Code Online (Sandbox Code Playgroud)

有没有更简单或更容易的方法来获得我想要的结果?

pytorch tensor

8
推荐指数
1
解决办法
2万
查看次数

Pytorch 中 [-1,0] 的维度范围是多少?

所以我很难理解一些关于 Pytorch 集合的术语。我不断遇到关于我的张量范围不正确的相同类型的错误,当我尝试谷歌寻找解决方案时,解释往往更加混乱。

下面是一个例子:

m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([0.3300, 0.3937, -0.3113, -0.2880])
output = m(input)
Run Code Online (Sandbox Code Playgroud)

我没有发现上面的代码有什么问题,我已经定义LogSoftmax了接受一维输入。所以根据我使用其他编程语言的经验,集合[0.3300, 0.3937, -0.3113, -0.2880]是一个单一的维度。

以上触发了以下错误m(input)

IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
Run Code Online (Sandbox Code Playgroud)

这意味着什么?

我传入了一个一维张量,但它告诉我它期望的范围是[-1, 0], but got 1.

  • 什么范围?
  • 为什么比较1to的维度会出现错误[-1, 0]
  • 这两个数字[-1, 0]是什么意思?

我搜索了这个错误的解释,我发现像这个链接这样的东西对我作为一个程序员来说毫无意义:

https://github.com/pytorch/pytorch/issues/5554#issuecomment-370456868

因此,我能够通过向张量数据添加另一个维度来修复上述代码。

IndexError: Dimension out of range (expected to be in range of …
Run Code Online (Sandbox Code Playgroud)

python softmax pytorch tensor

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

在不复制内存的情况下重复 pytorch 张量

是否pytorch支持在不分配更多内存的情况下重复张量?

假设我们有一个张量

t = torch.ones((1,1000,1000))
t10 = t.repeat(10,1,1)
Run Code Online (Sandbox Code Playgroud)

重复t10 次需要占用 10 倍的内存。有没有办法在t10不分配更多内存的情况下创建张量?

是一个相关的问题,但没有答案。

memory pytorch tensor

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