2016-03-01 14 views
5

Sto costruendo un rnn e utilizzando il parametro sequene_length per fornire un elenco di lunghezze per sequenze in un batch e tutte le sequenze in un batch sono riempite alla stessa lunghezza.imbottitura di lunghezza variabile rnn e mascheramento di gradienti di riempimento

Tuttavia, quando si esegue il backprop, è possibile mascherare i gradienti corrispondenti ai passaggi imbottiti, quindi questi passaggi potrebbero apportare 0 contributi agli aggiornamenti del peso? Sono già mascheratura relativi costi come questo (dove batch_weights è un vettore di 0 e di 1, in cui gli elementi corrispondenti alle fasi di riempimento sono 0.):

loss = tf.mul(tf.nn.sparse_softmax_cross_entropy_with_logits(logits, tf.reshape(self._targets, [-1])), batch_weights) 

self._cost = cost = tf.reduce_sum(loss)/tf.to_float(tf.reduce_sum(batch_weights)) 

il problema è che non sono sicuro da facendo quanto sopra se i gradienti delle fasi di riempimento sono azzerati o no?

risposta

2

Per tutte le operazioni framewise/feed-forward (non ricorrenti), mascherare la perdita/costo è sufficiente.

Per tutte le operazioni sequenza/ricorrenti (ad esempio dynamic_rnn), esiste sempre un parametro sequence_length che è necessario impostare sulle lunghezze di sequenza corrispondenti. Quindi non ci sarà un gradiente per i passi con riempimento a zero, o in altri termini, avrà un contributo di 0.

Problemi correlati