Каким образом tf.nn.sparse_softmax_cross_entropy_with_logits отличается от rnet формы logits в качестве меток - PullRequest
0 голосов
/ 04 августа 2020

Есть кое-что, чего я не понимаю в функции 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.

Это ошибка или есть какой-то смысл в этом?

...