#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]
, поэтому это может быть опечатка