Есть кое-что, чего я не понимаю в функции tf.nn.sparse_softmax_cross_entropy_with_logits
(на данный момент сокращенно sscewl). Позволь мне объяснить. Если у меня есть данный тензор меток и логитов, например:
import tensorflow as tf
import random
BATCH_SIZE = 32
labels = tf.constant([random.randint(0,5) for _ in range(BATCH_SIZE)])
logits = tf.random.normal((32, 6))
, значит, у меня размер партии 32 со случайными метками от 0 до 5. Логиты имеют форму (32,6) поскольку существует партия размером 32 и имеется 6 возможных этикеток. Таким образом, мы не можем легко вычислить sscewl:
x = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels)
Нет проблем, пока я все понимаю. Мне также ясно, что если я выберу logits = tf.random.normal((32, 5))
, это не сработает, поскольку есть 6 возможных меток, но только 5 lo git -values
Я не понимаю, почему вместо logits = tf.random.normal((32, 6))
любое значение больше 6 во втором аргументе формы может иметь смысл. Хорошо, возможно, что одна метка не существует в пакете, поэтому форма логитов будет больше, чем максимальное количество меток, но я видел примеры, когда кто-то использовал форму логитов (BATCH_SIZE, 256)
вместе с тензором меток, который имеет максимум 6.
Это ошибка или есть какой-то смысл в этом?