2016-12-14 8 views
5

sequence_Loss модуль source_code имеет три параметра, которые необходимы, чтобы они отображали их как выходы, цели и массы.понимание параметров тензорного потока sequence_loss

Выводы и цели являются пояснительными, но я хочу лучше понять, что такое параметр weight?

Другая вещь, которую я сбиваю с толку, заключается в том, что она указывает, что targets должен быть таким же length как выходы, что именно они означают по длине тензора? Особенно если это трехмерный тензор.

ответ

0

Мы использовали это в своем классе, и наш профессор сказал, что мы можем просто передать ему правильную форму (в комментарии говорится «список 1D размерных поплавков-тензоров с такой же длиной, что и логиты»). Это не помогает в том, что они означают, но, возможно, это поможет вам запустить ваш код. Работал для меня.

Этот код должен делать трюк: [tf.ones(batch_size, tf.float32) for _ in logits].

Edit: из кода TF:

for logit, target, weight in zip(logits, targets, weights): 
     if softmax_loss_function is None: 
     # TODO(irving,ebrevdo): This reshape is needed because 
     # sequence_loss_by_example is called with scalars sometimes, which 
     # violates our general scalar strictness policy. 
     target = array_ops.reshape(target, [-1]) 
     crossent = nn_ops.sparse_softmax_cross_entropy_with_logits(
      logit, target) 
     else: 
     crossent = softmax_loss_function(logit, target) 
     log_perp_list.append(crossent * weight) 

Веса, которые передаются умножается на потерях для этого конкретного логита. Поэтому я думаю, что если вы хотите особо предположить, что вы можете увеличить вес выше 1.

+0

Это немного помогает, но я пытаюсь понять больше о том, какова цель параметра веса, я не нахожу много обсуждений весов в функции потерь RNN, если мы не говорим о выходе слой. Вы случайно знаете ответ на правильный вопрос о форме, относящийся к тому, что означает длина? – TheM00s3

+0

Я думаю, вы говорите о комментарии в коде? 'weight: List of 1D float-Tensors размером до одной длины, что и logits.' Является ли ваш вопрос об этом комментарии? –

+0

это будет один. – TheM00s3

1

Подумайте о весах в качестве маски, применяемой к входному тензору. В некоторых приложениях NLP мы часто используем длину предложения для каждого предложения. Для параллельного/пакетного ввода нескольких экземпляров в мини-канал для подачи в нейронную сеть люди используют маску-матрицу для обозначения того, какой элемент во входном тензоре фактически является допустимым входом. Например, вес может быть np.ones([batch, max_length]), что означает, что все входные элементы являются законными.

Мы также можем использовать матрицу той же формы, что и этикетки, такие как np.asarray([[1,1,1,0],[1,1,0,0],[1,1,1,1]]) (мы предполагаем, что форма метки является 3x4), то crossEntropy первой строки последнего столбца будет маскироваться как 0.

Вы также можете использовать вес для расчета взвешенного накопления кросс-энтропии.

Смежные вопросы