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]

Эта "кодировка" будет использоваться в каждой партии.

Другие вопросы по тегам