У меня возникла проблема с преобразованием тензора факела в массив numpy.
avg_rewards = th.mean(rewards, dim=[0,1,3])
avg_targets = th.mean(th.mean(targets.reshape(rewards.shape), dim=[0, 1, 3]))
avg_score = th.max(avg_rewards, avg_targets)
avg_q = th.mean(q, dim=[0, 1, 3])
griefers = avg_score > avg_q
griefers = [i for i, x in enumerate(griefers) if x]
grieve_factor = th.tanh(th.clamp(avg_score / avg_q, min=0)).detach().numpy()
Последняя строка возвращает ошибку. Если я использую .detach().numpy(), я получаю сообщение "use .cpu()...".
Однако, если я использую .cpu(), я получаю сообщение об ошибке «использовать .detach().numpy()».
Я распечатал тип grieve_factor:
the grieve factors are tensor([0., 0.], device='cuda:0', grad_fn=<TanhBackward0>)
Мне не нужны никакие градиенты, и я просто хочу, чтобы это был массив [0., 0.]






По умолчанию Tensor.numpy() выполняет преобразование только в том случае, если тензор находится на процессоре . Поскольку ваш тензор находится на графическом процессоре, вы должны либо переместить его на процессор перед преобразованием, как указано в комментарии, либо установив force=True:
grieve_factor = th.tanh(th.clamp(avg_score / avg_q, min=0)).numpy(force=True)
Не могли бы вы попробовать
.detach().cpu()? Или.detach().cpu().numpy().