pytorch + tenorboard error "AttributeError: у объекта 'Tensor' нет атрибута 'items'" - PullRequest
0 голосов
/ 28 апреля 2020

Добрый день. Я хочу записать потерю поезда, используя тензорную доску в pytorch. Там я получил ошибку.

AttributeError: 'Tensor' object has no attribute 'items'

Я хочу решить эту ошибку и проверить журнал с помощью тензорной доски. Здесь я показываю свой код.

l_mse = mseloss(img,decoder_out)
writer.add_scalars("MSE",l_mse,n_iter)

img - это реальное изображение в GAN, а decoder_out - это выход генератора. тогда я получаю сообщение об ошибке.

Traceback (most recent call last):
  File "main.py", line 39, in <module>
    main()
  File "main.py", line 22, in main
    solover.train(dataloader)
  File "path to my file", line 239, in train
    writer.add_scalars("MSE",l_mse,n_iter)
  File "/~~/anaconda3/lib/python3.7/site-packages/torch/utils/tensorboard/writer.py", line 378, in add_scalars
    for tag, scalar_value in tag_scalar_dict.items():
AttributeError: 'Tensor' object has no attribute 'items'

Я пытался

writer.add_scalars("MSE",l_mse,n_iter).eval()
writer.add_scalars("MSE",l_mse.item(),n_iter)
writer.add_scalars("MSE",l_mse.detach().cpu().numpy(),n_iter)

, но все равно не работает.

1 Ответ

1 голос
/ 29 апреля 2020

Вы звоните на writer.add_scalars с s. Из документации Pytorch Tensorboardx видно, что эта функция ожидает ввода dictionary.

 add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)
  • tag_scalar_dict (dict) - ключ-значение пара, хранящая тег и соответствующие значения
writer = SummaryWriter()
r = 5
for i in range(100):
    writer.add_scalars('run_14h', {'xsinx':i*np.sin(i/r),
                                    'xcosx':i*np.cos(i/r),
                                    'tanx': np.tan(i/r)}, i)
writer.close()

Используйте writer.add_scalar вместо

Для записи скалярного значения используйте writer.add_scalar('myscalar', value, iteration). Обратите внимание, что программа жалуется, если вы подаете тензор PyTorch. Не забудьте извлечь скалярное значение на x.item(), если x - скалярный тензор факела.

writer.add_scalar("MSE", l_mse.item(), n_iter)
...