मैंने RNN language model using TensorFlow लिखा है। मॉडल को RNN
वर्ग के रूप में कार्यान्वित किया गया है। ग्राफ संरचना कन्स्ट्रक्टर में बनाई गई है, जबकि RNN.train
और RNN.test
विधियां इसे चलाती हैं।जब मैं state_is_tuple = True करता हूं तो मैं टेंसरफ्लो आरएनएन स्थिति कैसे सेट करूं?
जब मैं प्रशिक्षण सेट में किसी नए दस्तावेज़ में जाता हूं, या जब मैं प्रशिक्षण के दौरान सत्यापन सेट चलाता हूं तो मैं आरएनएन स्थिति को रीसेट करने में सक्षम होना चाहता हूं। मैं इसे प्रशिक्षण लूप के अंदर राज्य के प्रबंधन से करता हूं, इसे फीड डिक्शनरी के माध्यम से ग्राफ में पास करता हूं।
निर्माता में मैं जैसे RNN को परिभाषित तो
cell = tf.nn.rnn_cell.LSTMCell(hidden_units)
rnn_layers = tf.nn.rnn_cell.MultiRNNCell([cell] * layers)
self.reset_state = rnn_layers.zero_state(batch_size, dtype=tf.float32)
self.state = tf.placeholder(tf.float32, self.reset_state.get_shape(), "state")
self.outputs, self.next_state = tf.nn.dynamic_rnn(rnn_layers, self.embedded_input, time_major=True,
initial_state=self.state)
प्रशिक्षण पाश की तरह इस
for document in document:
state = session.run(self.reset_state)
for x, y in document:
_, state = session.run([self.train_step, self.next_state],
feed_dict={self.x:x, self.y:y, self.state:state})
x
और y
एक दस्तावेज़ में प्रशिक्षण डेटा के बैच हैं लग रहा है। विचार यह है कि मैं प्रत्येक बैच के बाद नवीनतम स्थिति पास करता हूं, सिवाय जब मैं एक नया दस्तावेज़ शुरू करता हूं, जब मैं self.reset_state
चलाकर राज्य को शून्य करता हूं।
यह सब काम करता है। अब मैं अनुशंसित state_is_tuple=True
का उपयोग करने के लिए अपना आरएनएन बदलना चाहता हूं। हालांकि, मुझे नहीं पता कि एक फीड डिक्शनरी के माध्यम से अधिक जटिल एलएसटीएम राज्य वस्तु को कैसे पारित किया जाए। इसके अलावा मुझे नहीं पता कि मेरे कन्स्ट्रक्टर में self.state = tf.placeholder(...)
लाइन पर कौन से तर्क पारित किए गए हैं।
यहां सही रणनीति क्या है? dynamic_rnn
के लिए अभी भी बहुत उदाहरण कोड या दस्तावेज उपलब्ध नहीं है।
TensorFlow मुद्दों 2695 और 2838 प्रासंगिक लगें।
WILDML पर blog post इन मुद्दों को संबोधित करता है लेकिन सीधे जवाब का वर्णन नहीं करता है।
TensorFlow: Remember LSTM state for next batch (stateful LSTM) भी देखें।
'rnn_cell._unpacked_state' और' rnn_cell._packed_state' देखें। लूप फ़ंक्शन में तर्क टेंसर की सूची के रूप में राज्य को पास करने के लिए इन्हें 'rnn._dynamic_rnn_loop()' में उपयोग किया जाता है। – JunkMechanic
मुझे नवीनतम TensorFlow स्रोत में तारों को _ _unpacked_state' और '_packed_state' दिखाई नहीं देता है। क्या ये नाम बदल गए हैं? –
हम्म। उन्हें हटा दिया गया है। इसके बजाए, एक नया मॉड्यूल 'tf.python.util.nest' अनुरूप 'flatten' और' pack_sequence_as' के साथ पेश किया गया है। – JunkMechanic