Я использую 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()
и получил ту же ошибку. что означает эта ошибка? что я могу сделать, чтобы его удалить?