tensorflow rnn_decoder 对每个 decoder_output 执行 softmax

tensorflow rnn_decoder perform softmax on each decoder_output

我尝试为 GCP ML 引擎包编写自己的估算器 model_fn()。我使用 embedding_rnn_decoder 解码了一系列输出,如下所示:

outputs, state = tf.contrib.legacy_seq2seq.embedding_rnn_decoder(
    decoder_inputs = decoder_inputs,
    initial_state = curr_layer,
    cell = tf.contrib.rnn.GRUCell(hidden_units),
    num_symbols = n_classes, 
    embedding_size = embedding_dims,
    feed_previous = False)

我知道输出是 "A list of the same length as decoder_inputs of 2D Tensors" 但我想知道如何使用这个列表来计算整个序列的损失函数?

我知道如果我抓取输出[0](即只抓取第一个序列输出)那么我可能会因以下操作而失败:

logits = tf.layers.dense(
    outputs[0],
    n_classes)
loss = tf.reduce_mean(
    tf.nn.sparse_softmax_cross_entropy_with_logits(
        logits=logits, labels=labels)

为输出中的每个项目生成一个损失值,然后将这些全部传递给tf.reduce_mean是否合适?这感觉效率低下,尤其是对于长序列——有没有其他方法可以更有效地计算序列每一步的 softmax?

看来我的问题的解决方案是使用 sequence_loss_by_example

我认为您正在寻找 sequence_loss(目前在 contrib/ 一种孵化中)。