2016-03-01 8 views
5

मैं एक आरएनएन बना रहा हूं और बैच में अनुक्रमों के लिए लंबाई की सूची प्रदान करने के लिए sequene_length पैरामीटर का उपयोग कर रहा हूं, और बैच में सभी अनुक्रम एक ही लंबाई में गद्देदार हैं।चर-लंबाई आरएनएन पैडिंग और मास्क आउट पैडिंग ग्रेडिएंट

हालांकि, बैकप्रॉप करते समय, गद्देदार चरणों से संबंधित ग्रेडियेंट को मास्क करना संभव है, इसलिए इन चरणों में वजन अपडेट में 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)) 

समस्या मैं से यकीन नहीं है: मैं पहले से ही इस तरह उनकी संगत लागत (जहां batch_weights 0 और 1 का है, जहां गद्दी चरणों के लिए इसी तत्व 0 के हैं का एक वेक्टर है) बाहर मास्किंग कर रहा हूँ ऊपर क्या कर रहा है कि पैडिंग चरणों से ग्रेडियेंट शून्य हो गए हैं या नहीं?

उत्तर

2

सभी फ्रेमवाइड/फीड-फॉरवर्ड (गैर-आवर्ती) संचालन के लिए, हानि/लागत का मुखौटा पर्याप्त है।

सभी अनुक्रम/आवर्ती संचालन (उदा। dynamic_rnn) के लिए, हमेशा sequence_length पैरामीटर होता है जिसे आपको अनुक्रम अनुक्रम लंबाई में सेट करने की आवश्यकता होती है। फिर शून्य-गद्देदार चरणों के लिए ढाल नहीं होगा, या दूसरे शब्दों में, इसमें 0 योगदान होगा।

संबंधित मुद्दे