【问题标题】:Pytorch datatype/dimension confusion TypeError: 'Tensor' object is not callablePytorch 数据类型/维度混淆类型错误:“张量”对象不可调用
【发布时间】:2020-10-26 07:46:20
【问题描述】:

这段代码最初是用 numpy 编写的,我试图通过在 pytorch 中重写它来利用 GPU 计算,但是由于我是 pytorch 的新手,所以我遇到了很多问题。首先,我对张量的维度感到困惑。有时在对张量进行操作之后,只有转置张量才能解决问题,无论如何我可以停止做 .t() 吗?这里的主要问题是在 ar = torch.stack ... 行中出现错误“TypeError: 'Tensor' object is not callable”。任何建议/更正将不胜感激。呵呵

def vec_datastr(vector):

    vector = vector.float()
    # Find the indices corresponding to non-zero entries
    index = torch.nonzero(vector)
    index = index.t()

    # Compute probability
    prob = vector ** 2
    if torch.sum(prob) == 0:
        prob = 0
    else:
        prob = prob / torch.sum(prob)

    d = depth(vector)
    CumProb = torch.ones((2**d-len(prob.t()),1), device ='cuda')
    cp = torch.cumsum(prob, dim=0)
    cp = cp.reshape((len(cp.t()),1))
    CumProb = torch.cat((cp, CumProb),0)
    vector = vector.t()
    prob = prob.t()

    ar = torch.stack((index, vector([index,1]), prob([index, 1]), CumProb([index, 1]))) # Problems occur here
    ar = ar.reshape((len(index), 4))

    # Store the data as a 4-dimensional array
    output = dict()
    output = {'index':ar[:,0], 'value': ar[:,1], 'prob':ar[:,2], 'CumProb': ar[:,3]}

    return output

【问题讨论】:

    标签: pytorch


    【解决方案1】:
    ar = torch.stack(
        (index, vector([index, 1]), prob([index, 1]), CumProb([index, 1]))
    )  # Problems occur here
    

    vector 的类型为 torch.Tensor。它没有定义__call__。您将选择vector(...) (vector([index,1])),而您应该像这样直接对数据进行切片:vector[index, 1]probCumProb 也是如此。

    不知何故,你正确地为arar[:,0] 做到了,所以它可能是一个错字

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 2011-07-08
      • 2020-03-08
      • 2011-02-01
      • 1970-01-01
      相关资源
      最近更新 更多