Ошибка типа данных Pytorch / путаница в измерениях: объект ‘Tensor’ не вызывается

#pytorch

#pytorch

Вопрос:

Этот фрагмент кода изначально написан на numpy, и я пытаюсь использовать вычисления на графическом процессоре, переписав его в pytorch, но, поскольку я новичок в pytorch, у меня возникло много проблем. Во-первых, меня смущает размерность тензоров. Иногда после работы с тензорами проблему устранит только перенос тензора, могу ли я в любом случае прекратить делать .t()? Основная проблема здесь заключается в том, что в строке ar = torch.stack …возникает ошибка «Ошибка типа: объект ‘Tensor’ не вызывается «. Любые предложения / исправления будут оценены. Thxxx

 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
  

Ответ №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] . То же самое относится и к prob and CumProb .

Каким-то образом вы делаете это правильно для ar with ar[:,0] , поэтому это может быть опечатка