tf.nn.sparse_softmax_cross_entropy_with_logits - метки без одного горячего кодирования в тензорном потоке
Я пытаюсь понять как tf.nn.sparse_softmax_cross_entropy_with_logits
работает.
Описание говорит:
A common use case is to have logits of shape [batch_size, num_classes]
and labels of shape [batch_size]. But higher dimensions are supported.
Таким образом, это предполагает, что мы можем накормить этикетки в сыром виде, например [1,2,3]
,
Теперь, поскольку все вычисления выполняются для каждой партии, я считаю, что возможно следующее:
Во всех случаях мы принимаем размер партии равным двум.
Случай 1 (с одной партией): logit:
0.4 0.2 0.4
0.3 0.3 0.4
соответствующие этикетки:
2
3
Я предполагаю, что ярлыки могут быть закодированы как
[1 0 0]
[0 1 0]
Случай 2 (с другой партией): logit:
0.4 0.2 0.4
0.3 0.3 0.4
соответствующие этикетки:
1
2
Я предполагаю, что метки могут быть закодированы как (я не вижу, что мешает нам это кодирование, если тензорный поток не отслеживает, как это кодировалось раньше)
[1 0 0]
[0 1 0]
Итак, у нас есть две разные кодировки. Можно ли предположить, что тензорный поток сохраняет кодирование одинаковым от партии к партии?
1 ответ
Там нет реального кодирования происходит. Этикетки - это просто позиция 1
в соответствии с одним горячим вектором:
0 -> [1, 0, 0]
1 -> [0, 1, 0]
2 -> [0, 0, 1]
Эта "кодировка" будет использоваться в каждой партии.