मैं एक ऐसे मॉडल को प्रशिक्षण दे रहा हूं जहां इनपुट वेक्टर दूसरे मॉडल का आउटपुट हो। उसी प्रक्रिया में दूसरे मॉडल को स्क्रैच से (tf.initialize_variables()
का उपयोग करके) प्रारंभ करते समय चेकपॉइंट फ़ाइल से पहला मॉडल बहाल करना शामिल है।टेन्सफोर्लो में एक से अधिक सत्र और आलेख (उसी प्रक्रिया में)
कोड और अमूर्तता की एक बड़ी मात्रा है, इसलिए मैं यहां प्रासंगिक अनुभागों को चिपका रहा हूं।
self.variables = [var for var in all_vars if var.name.startswith(self.name)]
saver = tf.train.Saver(self.variables, max_to_keep=3)
self.save_path = tf.train.latest_checkpoint(os.path.dirname(self.checkpoint_path))
if should_restore:
self.saver.restore(self.sess, save_path)
else:
self.sess.run(tf.initialize_variables(self.variables))
प्रत्येक मॉडल का अपना ग्राफ और सत्र के भीतर दायरे वाला, इस तरह::
self.graph = tf.Graph()
self.sess = tf.Session(graph=self.graph)
with self.sess.graph.as_default():
# Create variables and ops.
एक मॉडल के भीतर सभी चर variable_scope
भीतर बनाई गई हैं
निम्नलिखित बहाल कोड है संदर्भ प्रबंधक
खिला इस प्रकार काम करता है:
- एक पृष्ठभूमि धागा
input = scipy.misc.imread(X)
परsess.run(inference_op)
कॉल करता है और एक अवरुद्ध धागा सुरक्षित कतार में परिणाम डालता है। - मुख्य प्रशिक्षण लूप कतार से पढ़ता है और दूसरे मॉडल पर
sess.run(train_op)
पर कॉल करता है।
समस्या:
मैं देख रहा हूँ कि नुकसान मूल्यों, यहां तक कि प्रशिक्षण (दूसरे मॉडल) के पहले चरण में रन के पार तेजी से बदल रहा है रखने के (और कुछ पुनरावृत्तियों में नेन हो जाते हैं)। मैंने पुष्टि की कि पहले मॉडल का उत्पादन हर समय बिल्कुल वही है। पहले मॉडल के sess.run
पर टिप्पणी करते हुए और इसे एक मसालेदार फ़ाइल से समान इनपुट के साथ बदलने से यह व्यवहार नहीं दिखता है।
यह train_op
है:
loss_op = tf.nn.sparse_softmax_cross_entropy(network.feedforward())
# Apply gradients.
with tf.control_dependencies([loss_op]):
opt = tf.train.GradientDescentOptimizer(lr)
grads = opt.compute_gradients(loss_op)
apply_gradient_op = opt.apply_gradients(grads)
return apply_gradient_op
मैं जानता हूँ कि यह अस्पष्ट है, लेकिन मैं अधिक जानकारी प्रदान करने के लिए खुश हूँ। किसी भी मदद की सराहना की है!
मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आप अपना समाधान विस्तारित कर सकते हैं? –
'sess.run' को समवर्ती रूप से न चलाएं। Tensorflow (सभी खुलासा) GPU स्मृति का पूरा नियंत्रण मानता है। दो अलग-अलग प्रक्रियाओं या धागे में एक साथ sess.run' चलाना मुद्दों का कारण बन जाएगा। – Vikesh