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/ 一种孵化中)。
我尝试为 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/ 一种孵化中)。