我有一个三维张量,source of (bsz x slen1 x nhd)和2d张量,index of shape (bsz x slen2)。更具体地说,我有:
source = 32 x 20 x 768
index = 32 x 16
index张量中的每个值都在[0, 19]之间,根据source张量的第2 dim值,source张量是期望向量的索引。
在索引之后,我期待一个形状的输出张量,32 x 16 x 768。
目前,我正在这样做:
bsz, _, nhid = source.size()
_, slen = index.size()
source = source.re
我正在实验卷积中的膨胀,我试图用PyTorch将数据从一个二维张量复制到另一个2D张量。我将值从张量A复制到张量B,这样复制到B中的A的每个元素都被n零包围。
我已经尝试过使用嵌套的for循环,这是一种非常天真的方法。显然,当我使用大量灰度图像作为输入时,性能很差。
for i in range(A.shape[0]):
for j in range(A.shape[1]):
B[n+i][n+j] = A[i][j]
有没有更快的东西不需要循环的使用?
对于numpy,我可以这样做一个简单的矩阵乘法:
a = numpy.ones((3, 2))
b = numpy.ones((2, 1))
result = a.dot(b)
但是,这不适用于PyTorch:
a = torch.ones((3, 2))
b = torch.ones((2, 1))
result = torch.dot(a, b)
此代码引发以下错误:
RuntimeError:一维张量,但得到二维张量和二维张量
如何在PyTorch中执行矩阵乘法?
有一个二维张量a[m,n]和一个三维张量b[k,n,h]。我应该使用什么API将二维张量乘以三维张量来获得三维张量c[k,m,h]? 实际上,我可以通过以下方式获得它: import tensorflow as tf
import tensorly as tl
x = tf.constant([[[1,2],[3,7],[8,9]],
[[4,5],[6,10],[11,12]]],tf.float32)
a = tf.constant([[-0.70711,0.57735],
[0.0000,0.57735],
我有一个三维张量,形状(3000,20,5).我想要创建一个二维张量,形状(3000,5),使用三维张量第二维的平均值。
所以,基本上,我想表演这样的东西:
mean_value = torch.mean(3d_tensor[0][:][0])
但得到的所有数值的第一,一,三。我可以做一个for循环,例如:
for j in range(0, 3d_tensor.size()[2]):
for i in range(0, len(3d_tensor)):
mean_values[j][i] = torch.mean(3d_tensor[i][:][j])
但这需要很长
我正在用手电筒写一个神经网络。
作为其中的一部分,我必须将维数a x b x c的三维张量转换为维数a x b*c的二维张量。
以下是代码:
input = torch.Tensor(a, b, c) -- Arbitrary 3D tensor
net = nn.Sequential()
net:add(nn.View(-1):setNumInputDims(2))
net:forward(input)
现在,我想修改我的网络,以便它可以处理小型批次作为输入。因此,我想把维数d x a x b x c的四维张量转化为维数d x a x b*c的三维张量,其中d是我的小批中的元素数。d是事先
总结了问题
我正在处理高维张量,我需要用另一个张量的argmax值来索引一个张量。因此,我需要用dim [3,4]的张量x的argmax对dim [3,4]的张量进行索引。如果张量为:
import torch as T
# Tensor to get argmax from
# expected argmax: [2, 0, 1]
x = T.tensor([[1, 2, 8, 3],
[6, 3, 3, 5],
[2, 8, 1, 7]])
# Tensor to index with argmax from preivous
#