我尝试为GCP ML Engine包编写自己的估算器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)
我知道输出是"与2D张量的解码器输入长度相同的列表"但我想知道如何使用这个列表来计算整个序列的损失函数?
我知道如果我抓住输出[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更有效?
答案 0 :(得分:1)
我认为你正在寻找sequence_loss(目前处于contrib /一种孵化模式)。
答案 1 :(得分:0)
我的问题的解决方案似乎是使用sequence_loss_by_example