1
resposta

Problemas para converter um tensor do torch para numpy array

Não consigo executar o foward da aula 2, sempre que eu chamo a função ele retorna o erro:

TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

eu reescrevi e testei a função linha por linha o erro acontece na linha loss_epoca = np.array(loss_epoca)

def forward(X, Y, etapa, epoca):

  acuracia = 0
  loss_epoca = []
  for dado, rotulo in zip(X, Y):
    dado   = dado.to(device)
    rotulo = rotulo.to(device)

    saida = modelo(dado) # B x C = 1 x 18
    loss = criterio(saida, rotulo)
    loss_epoca.append(loss)

    _, pred = torch.max(saida, axis=-1)
    acuracia += 1 if pred[0].item() == rotulo[0].item() else 0

    if etapa == 'treino':
      optimizer.zero_grad()
      loss.backward()
      optimizer.step()

    loss_epoca = np.array(loss_epoca) # <<<- O erro acontece aqui, 
    acuracia   = acuracia/float(len(X))

    print('\n', '*' * 15 + etapa + '*' * 15)
    print('Epoca: {:}, Loss: {:.2f}, Acc: {:.2f}'.format(epoca, 
                                                         loss.mean(), 
                                                         loss.std(), 
                                                         acuracia*100 ))
    return loss.mean(), acuracia

eu tentei usar algumas funções pra resolver tipo .cpu() e .numpy() mas nenhum soluciona o erro .

1 resposta

Oi, Lucas! Tudo bem com você?

Desculpa a demora para te trazer um retorno.

Eu te aconselho primeiro a baixar o código da instrutora na atividade Preparando o ambiente e testá-lo para verificar quais pontos estão diferentes dos seus.

Caso ainda sim continue a dar erro, peço para você me retornar aqui qual a versão das bibliotecas utilizadas no seu projeto e também qual o erro que é retornado ao executar seu código.

Fico no aguardo do seu retorno. Bons estudos!