мне нужно добавить softmax в def forward, когда я использую torch.nn.CrossEntropyLoss

https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html

Когда я прочитал содержание выше, я понял, что torch.nn.CrossEntropy уже вычисляет оценку опыта последнего слоя. Поэтому я подумал, что функция forward не обязательно должна включать softmax. Например, верните self.fc (x), а не nn.softmax (self.fc (x)). Однако я смущен, поскольку видел несколько реализаций классификаторов ConvNet, которые используют оба способа (они возвращаются с softmax или без него, в то время как оба используют перекрестную потерю энтропии).

Влияет ли эта проблема на производительность классификатора? Какой путь правильный?


person JHPark    schedule 25.10.2020    source источник


Ответы (1)


JHPark,

Вы правы - с torch.nn.CrossEntropyLoss нет необходимости включать softmax слой. Если кто-то действительно включает softmax, это все равно приведет к правильному результату классификации, поскольку softmax не меняет, какой элемент имеет максимальное количество баллов. Однако, если применить дважды, это может исказить относительные уровни выходных сигналов, делая градиенты менее сильными и потенциально замедляя обучение.

person Poe Dator    schedule 25.10.2020