#pytorch
#пыторч
Вопрос:
Я хочу получить неожиданные значения из выходных данных logit от PyTorch, используя базу данных журнала 2.
Одним из способов сделать это, учитывая тензор логитов, является:
probs = nn.functional.softmax(logits, dim = 2) surprisals = -torch.log2(probs)
Тем не менее, PyTorch предоставляет функцию, которая сочетает в себе log и softmax, что быстрее, чем указано выше:
surprisals = -nn.functional.log_softmax(logits, dim = 2)
Но это, похоже, возвращает значения в базе e, чего я не хочу. Есть ли такая функция , как log_softmax
, но которая использует базу 2? Я пробовал log2_softmax
и log_softmax2
, ни то, ни другое, похоже, не работает, и мне не повезло найти документацию в Интернете.
Ответ №1:
Как насчет того, чтобы просто использовать тот факт, что базы логарифмов могут быть легко изменены с помощью следующего математического тождества
это то, что F.log_softmax()
дает вам. Все, что вам нужно сделать, это
surprisals = - (1 / torch.log(2.)) * nn.functional.log_softmax(logits, dim = 2)
Это просто скалярное умножение. Таким образом, у него вряд ли есть какие-либо недостатки в производительности.