2016-03-01 208 views
5

我正在構建一個rnn並使用sequene_length參數爲批次中的序列提供長度列表,並且批次中的所有序列填充爲相同長度。可變長度填充和填充填充梯度

但是,在執行反向傳播時,是否可以屏蔽與填充步驟相對應的梯度,因此這些步驟對權重更新的貢獻爲0?我已經掩蓋了他們這樣相應的費用(其中batch_weights是0和1,其中對應於填充步驟的元素爲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)) 

問題是我不知道的是否將填充步驟中的漸變歸零或不歸零?

回答

2

對於所有framewise /前饋(非經常性)操作,屏蔽損失/成本就足夠了。

對於所有的序列/循環操作(例如dynamic_rnn),總是有一個sequence_length參數,您需要將其設置爲相應的序列長度。那麼不會是零填充步驟的梯度,或者換句話說,它將有0個貢獻。