Wenn ich Dropout-Mechanismus für LSTM verwendet, führt die Rouge Punktzahl und Verlust von keinem Dropout-Modell besser als Modell mit Dropout. Also frage ich mich, ob mein Dropout-Code korrekt ist? Ich verwende tensorflow 0,12Wie DropoutWrapper in LSTM Training und Decodierung
cellClass = tf.nn.rnn_cell.LSTMCell
for layer_i in xrange(hps.enc_layers):
with tf.variable_scope('encoder%d'%layer_i), tf.device(
self._next_device()):
#bidirectional rnn cell
cell_fw = cellClass(
hps.num_hidden
,initializer=tf.random_uniform_initializer(-0.1, 0.1, seed=123),
state_is_tuple=False
)
cell_bw = cellClass(
hps.num_hidden
,initializer=tf.random_uniform_initializer(-0.1, 0.1, seed=113),
state_is_tuple=False
)
cell_fw = tf.nn.rnn_cell.DropoutWrapper(cell_fw, input_keep_prob=hps.input_dropout, output_keep_prob=hps.output_dropout)
cell_bw = tf.nn.rnn_cell.DropoutWrapper(cell_bw, input_keep_prob=hps.input_dropout, output_keep_prob=hps.output_dropout)
(emb_encoder_inputs, fw_state, _) = tf.nn.bidirectional_rnn(
cell_fw, cell_bw, emb_encoder_inputs, dtype=tf.float32,
sequence_length=article_lens)
#decoder
cell = cellClass(
hps.num_hidden
,initializer=tf.random_uniform_initializer(-0.1, 0.1, seed=113),
state_is_tuple=False
)
cell=tf.nn.rnn_cell.DropoutWrapper(cell, input_keep_prob=hps.input_dropout, output_keep_prob=hps.output_dropout)
decoder_outputs, self._dec_out_state, self.cur_attns, self.cur_alpha = seq2seq.attention_decoder(
emb_decoder_inputs, self._dec_in_state, self._enc_top_states,
cell, num_heads=1, loop_function=loop_function,
initial_state_attention=initial_state_attention)
Beim Training I gesetzt diejenigen prob halten den Wert I wie 0,5 verwenden sein wird, wenn der Verlust der Trainingssatz und Validierungs Set Computing I halten sie als 0,5, aber in der Decodierschritt I 1 verwenden , die nichts ausgelassen haben. Hab ich recht?