2016-03-01 24 views
5

Tôi đang xây dựng một rnn và sử dụng tham số sequene_length để cung cấp danh sách độ dài cho chuỗi trong một lô và tất cả các chuỗi trong một đợt được đệm với cùng độ dài.Biến đổi độ dài và độ dốc vùng đệm biến đổi

Tuy nhiên, khi làm backprop, có thể che dấu các gradient tương ứng với các bước đệm, vì vậy các bước này sẽ có 0 đóng góp cho bản cập nhật trọng lượng? Tôi đã che ra chi phí tương ứng của họ như thế này (nơi batch_weights là một vector của 0 và 1, nơi các yếu tố tương ứng với bước đệm là 0 của):

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

vấn đề là tôi không chắc chắn bởi làm ở trên cho dù các gradient từ các bước đệm được zeroed ra hay không?

Trả lời

2

Đối với tất cả các hoạt động framewise/feed-forward (không tái phát), mặt nạ mất/chi phí là đủ.

Đối với tất cả các hoạt động tuần tự/tái diễn (ví dụ: dynamic_rnn), luôn có thông số sequence_length mà bạn cần đặt cho độ dài chuỗi tương ứng. Sau đó, sẽ không có một gradient cho các bước không đệm, hoặc trong các điều khoản khác, nó sẽ có 0 đóng góp.

Các vấn đề liên quan