TensorFlow, मॉडल को सहेजने के बाद 3 फाइलें क्यों हैं?


113

डॉक्स पढ़ने के बाद , मैंने एक मॉडल को इसमें सहेजा TensorFlow, यहाँ मेरा डेमो कोड है:

# Create some variables.
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# Add an op to initialize the variables.
init_op = tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

# Later, launch the model, initialize the variables, do some work, save the
# variables to disk.
with tf.Session() as sess:
  sess.run(init_op)
  # Do some work with the model.
  ..
  # Save the variables to disk.
  save_path = saver.save(sess, "/tmp/model.ckpt")
  print("Model saved in file: %s" % save_path)

लेकिन उसके बाद, मैंने पाया कि 3 फाइलें हैं

model.ckpt.data-00000-of-00001
model.ckpt.index
model.ckpt.meta

और मैं model.ckptफ़ाइल को पुनर्स्थापित करके मॉडल को पुनर्स्थापित नहीं कर सकता , क्योंकि ऐसी कोई फ़ाइल नहीं है। यहाँ मेरा कोड है

with tf.Session() as sess:
  # Restore variables from disk.
  saver.restore(sess, "/tmp/model.ckpt")

तो, 3 फाइलें क्यों हैं?


2
क्या आपने पता लगाया कि इसे कैसे संबोधित किया जाए? मैं मॉडल को फिर से कैसे लोड कर सकता हूं (केरस का उपयोग करके)?
रजकिरण

जवाबों:


116

इसे इस्तेमाल करे:

with tf.Session() as sess:
    saver = tf.train.import_meta_graph('/tmp/model.ckpt.meta')
    saver.restore(sess, "/tmp/model.ckpt")

TensorFlow save विधि तीन प्रकार की फ़ाइलों को सहेजती है क्योंकि यह ग्राफ़ संरचना को चर मानों से अलग संग्रहीत करती है.metaफ़ाइल, बचाया ग्राफ संरचना का वर्णन करता है ताकि आप (अन्यथा यह क्या चर बचाया चौकी मूल्यों के अनुरूप नहीं जानता है) चौकी बहाल करने से पहले इसे आयात करने के लिए की जरूरत है।

वैकल्पिक रूप से, आप ऐसा कर सकते हैं:

# Recreate the EXACT SAME variables
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")

...

# Now load the checkpoint variable values
with tf.Session() as sess:
    saver = tf.train.Saver()
    saver.restore(sess, "/tmp/model.ckpt")

भले ही कोई फ़ाइल नाम नहीं है model.ckpt, फिर भी आप इसे पुनर्स्थापित करते समय उस नाम से सहेजे गए चेकपॉइंट को देखें। से saver.pyस्रोत कोड :

उपयोगकर्ताओं को केवल किसी भी भौतिक पथनाम के बजाय उपयोगकर्ता-निर्दिष्ट उपसर्ग ... के साथ सहभागिता करने की आवश्यकता है।


1
तो .index और .data का उपयोग नहीं किया जाता है? जब उन 2 फ़ाइलों का उपयोग किया जाता है, तो?
अंजबिवि

26
@ ajfbiw.s .meta ग्राफ़ संरचना को संग्रहीत करता है, .data ग्राफ़ में प्रत्येक चर के मूल्यों को संग्रहीत करता है, .index चेकपियन की पहचान करता है। इसलिए ऊपर दिए गए उदाहरण में: import_meta_graph .meta, और saver.restore का उपयोग करता है ।data और .index
TK Bartel

ओह मैं समझा। धन्यवाद।
ajfbiw.s

1
किसी भी मौका आप TensorFlow के एक अलग संस्करण के साथ मॉडल को बचाया आप इसे लोड करने के लिए उपयोग कर रहे हैं? ( github.com/tensorflow/tensorflow/issues/5639 )
टीके बार्टेल

5
क्या किसी को पता है कि इसका मतलब 00000और 00001संख्या क्या है? में variables.data-?????-of-?????फ़ाइल
इवान Talalaev

55
  • मेटा फ़ाइल : सहेजे गए ग्राफ़ संरचना का वर्णन करता है, जिसमें ग्राफ़डीफ़, सेवरडेफ़, और इसी तरह शामिल हैं; फिर लागू करें tf.train.import_meta_graph('/tmp/model.ckpt.meta'), पुनर्स्थापित करेगा Saverऔर Graph

  • सूचकांक फ़ाइल : यह एक स्ट्रिंग-स्ट्रिंग अपरिवर्तनीय तालिका (टेंसरफ़्लो :: तालिका :: तालिका) है। प्रत्येक कुंजी एक टेंसर का एक नाम है और इसका मान एक क्रमबद्ध बंडलइंट्रीप्रोटो है। प्रत्येक बंडलइंट्रीप्रोटो एक टेंसर के मेटाडेटा का वर्णन करता है: "डेटा" फ़ाइलों में से एक टेंसर की सामग्री, उस फ़ाइल में ऑफसेट, चेकसम, कुछ सहायक डेटा आदि शामिल हैं।

  • डेटा फ़ाइल : यह TensorBundle संग्रह है, सभी चर के मूल्यों को बचा सकता है।


मुझे वह पीबी फ़ाइल मिल गई है जो मेरे पास छवि वर्गीकरण के लिए है। क्या मैं इसे रियलटाइम वीडियो वर्गीकरण के लिए उपयोग कर सकता हूं?

क्या आप मुझे बता सकते हैं कि कैरस 2 का उपयोग करते हुए, यदि मैं इसे 3 फाइलों के रूप में सहेजा जाता है तो मैं मॉडल को कैसे लोड करूं?
रजकिरण

5

मैं Word2Vec टेंसरफ़्लो ट्यूटोरियल से प्रशिक्षित शब्द एम्बेडिंग को पुनर्स्थापित कर रहा हूं ।

यदि आपने कई चौकियाँ बनाई हैं:

उदाहरण के लिए बनाई गई फाइलें इस तरह दिखती हैं

model.ckpt-55695.data-00000-ऑफ-00001

model.ckpt-55695.index

model.ckpt-55695.meta

इसे इस्तेमाल करे

def restore_session(self, session):
   saver = tf.train.import_meta_graph('./tmp/model.ckpt-55695.meta')
   saver.restore(session, './tmp/model.ckpt-55695')

जब कॉल रिस्टोरिंग_ सेशन ():

def test_word2vec():
   opts = Options()    
   with tf.Graph().as_default(), tf.Session() as session:
       with tf.device("/cpu:0"):            
           model = Word2Vec(opts, session)
           model.restore_session(session)
           model.get_embedding("assistance")

"00000-ऑफ-00001" का "मॉडल.कैप -55695.data-00000-ऑफ-00001" से क्या मतलब है?
hafiz031

0

यदि आपने ड्रॉपआउट के साथ CNN का प्रशिक्षण लिया है, उदाहरण के लिए, आप ऐसा कर सकते हैं:

def predict(image, model_name):
    """
    image -> single image, (width, height, channels)
    model_name -> model file that was saved without any extensions
    """
    with tf.Session() as sess:
        saver = tf.train.import_meta_graph('./' + model_name + '.meta')
        saver.restore(sess, './' + model_name)
        # Substitute 'logits' with your model
        prediction = tf.argmax(logits, 1)
        # 'x' is what you defined it to be. In my case it is a batch of RGB images, that's why I add the extra dimension
        return prediction.eval(feed_dict={x: image[np.newaxis,:,:,:], keep_prob_dnn: 1.0})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.