我嘗試爲GCP ML Engine包編寫我自己的估計器model_fn()。餘解碼的使用embedding_rnn_decoder輸出的序列如下所示:tensorflow rnn_decoder在每個decoder_output上執行softmax
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張量的decoder_inputs的列表」,但我想知道如何可以使用該列表來計算整個序列的損失函數?
我知道,如果我搶輸出[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更高效?
此信息是否有用? https://www.tensorflow.org/tutorials/seq2seq#sampled_softmax_and_output_projection – rhaertel80
不,這沒有幫助。我的問題沒有通過採樣softmax解決。我的問題是我需要執行softmax的多次迭代(在RNN的每個輸出上)。我需要計算序列中每個步驟的損失(或採樣的softmax損失),這是我不確定如何正確執行此操作的地方。 – reese0106