Pytorch nn.BCELoss () получает TypeError: объект Tensor не вызывается - PullRequest
0 голосов
/ 10 июля 2020

Я использую adv_loss = torch.nn.BCELoss() для расчета потерь для моей сети:

Когда я вызываю функцию в первый раз (первая партия), я не получаю сообщение об ошибке. Но, если я вызываю функцию второй раз (2-й пакет), я получаю ошибку 'Tensor' object is not callable.

Я обучаю GAN, где output_of_nn_layers = D(img1) (вывод сети дискриминатора) и

label = torch.ones(batch, 1, device=device, dtype = torch.float32)

Я также использую adv_loss (BCELoss) в обучении генератора, но во втором пакете возникает ошибка. Таким образом, общее время, которое он используется при обучении, 1-й пакет составляет 3 раза (2 раза для дискриминатора и 1 раз для генератора).

for i, (img1, img2) in enumerate(dataloader):
  #do some processing
  loss = adv_loss(output_of_nn_layers, label)
  #do some processing

Я получаю сообщение об ошибке: TypeError: 'Tensor' object is not callable

Полная ошибка log:


TypeError                                 Traceback (most recent call last)

<ipython-input-52-bafb0a65d4d9> in <module>()
     73       val_real = D(dis_train_real)
     74       print("check4.2")
---> 75       d_real_loss = adv_loss(val_real, real_label)   #BCELoss
     76       print("check4.3")
     77       val_fake = D(dis_train_fake)

TypeError: 'Tensor' object is not callable

Я нашел аналогичный вопрос в stackoerflow: Функция вызова: Tensor 'object' не вызывается

Это дало решение, что вызываемая функция не должна иметь переменную имя такое же, как имя функции. Я что-то упустил?

Я также пробовал использовать nn.L1Loss() и получил ту же ошибку. что означает эта ошибка? что я могу сделать, чтобы его удалить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...