2016-03-01 11 views
5

Buduję rnn i używając parametru sequene_length, dostarczam listę długości sekwencji w partii, a wszystkie sekwencje w grupie są dopełniane do tej samej długości.Wyrównanie długości i maskowanie wypełnienia o zmiennej długości

Jednak przy wykonywaniu wstecznego odbicia możliwe jest zamaskowanie gradientów odpowiadających krokom wyściełanym, więc te kroki miałyby 0 przyczynek do aktualizacji wagi? Jestem już maskowania odpowiadające im koszty następująco (gdzie batch_weights jest wektorem 0 i 1, gdzie elementy odpowiadające krokach dopełnienia są 0'S):

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)) 

problemem jest to, że nie jestem pewien, o w powyższym przypadku, czy gradienty z kroków wypełniania są wyzerowane, czy nie?

Odpowiedz

2

Dla wszystkich operacji ułamkowych/następczych (jednorazowych) wystarczające jest maskowanie strat/kosztów.

Dla wszystkich operacji sekwencyjnych/cyklicznych (np. dynamic_rnn), zawsze istnieje parametr sequence_length, który należy ustawić na odpowiednie długości sekwencji. Wtedy nie będzie gradientu dla kroków o zerowym wyściełaniu, lub w innych kategoriach będzie miał 0 wkład.

Powiązane problemy