Как использовать torch.nn.CrossEntropyLoss в качестве потери реконструкции автоэнкодера? - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу вычислить точность восстановления моего автоэнкодера, используя CrossEntropyLoss:

ae_criterion = nn.CrossEntropyLoss()
ae_loss = ae_criterion(X, Y)

, где X - реконструкция автоэнкодера, а Y - цель (поскольку это автоэнкодер, Yсовпадает с исходным вводом X).И X, и Y имеют форму [42, 32, 130] = [batch_size, timesteps, number_of_classes].Когда я запускаю приведенный выше код, я получаю следующую ошибку:

ValueError: Ожидаемый целевой размер (42, 130), получен факел. Размер ([42, 32, 130])

Просматривая документы, я все еще не уверен, как правильно позвонить nn.CrossEntropyLoss().Кажется, я должен изменить Y, чтобы иметь форму [42, 32, 1], где каждый элемент является скаляром в интервале [0, 129] (или [1, 130]), я прав?

Есть ли способ избежатьэтот?Поскольку X и Y находятся между 0 и 1, могу ли я просто использовать двоичную кросс-энтропийную потерю поэлементно эквивалентным образом?

1 Ответ

1 голос
/ 12 апреля 2019

Для CrossEntropyLoss форма Y должна быть (42, 32), каждый элемент должен быть длинным скаляром в интервале [0, 129].

Возможно, вы захотите использовать BCELossили BCEWithLogitsLoss для вашей проблемы.

...