TensorFlow 1.8

Checkpoints




tensorflow

Checkpoints

यह दस्तावेज़ यह जांचता है कि एस्टिमेटर्स के साथ बनाए गए टेन्सरफ्लो मॉडल को कैसे बचाया और पुनर्स्थापित किया जाए। TensorFlow दो मॉडल प्रारूप प्रदान करता है:

  • चौकियाँ, जो एक प्रारूप है जो उस कोड पर निर्भर करती है जिसने मॉडल बनाया था।
  • SavedModel, जो कोड का एक प्रारूप है जो मॉडल बनाया गया है।

यह दस्तावेज़ चौकियों पर केंद्रित है। SavedModel के विवरण के लिए, टेन्सरफ्लो प्रोग्रामर गाइड की सेविंग और रिस्टोरिंग चैप्टर देखें।

नमूना कोड

यह दस्तावेज़ TensorFlow के साथ आरंभ करने में विस्तृत एक ही आइरिस वर्गीकरण उदाहरण पर निर्भर करता है। उदाहरण को डाउनलोड करने और उस तक पहुंचने के लिए, निम्नलिखित दो आदेशों को लागू करें:

git clone https://github.com/tensorflow/models/
cd models/samples/core/get_started

इस दस्तावेज़ के अधिकांश कोड स्निपेट premade_estimator.py पर मामूली बदलाव हैं।

आंशिक रूप से प्रशिक्षित मॉडल को सहेजना

अनुमानक स्वचालित रूप से डिस्क पर निम्नलिखित लिखते हैं:

  • चौकियों , जो प्रशिक्षण के दौरान बनाए गए मॉडल के संस्करण हैं।
  • ईवेंट फ़ाइलें , जिसमें ऐसी जानकारी होती है जो TensorBoard विज़ुअलाइज़ेशन बनाने के लिए उपयोग करती है।

शीर्ष-स्तरीय निर्देशिका निर्दिष्ट करने के लिए जिसमें एस्टिमेटर अपनी जानकारी संग्रहीत करता है, किसी भी एस्टीमेटर के निर्माता के वैकल्पिक model_dir तर्क के लिए एक मान असाइन करें। उदाहरण के लिए, निम्न कोड models/iris निर्देशिका के लिए model_dir तर्क सेट करता है:

classifier = tf.estimator.DNNClassifier(
    feature_columns=my_feature_columns,
    hidden_units=[10, 10],
    n_classes=3,
    model_dir='models/iris')

मान लीजिए कि आप एस्टिमेटर की train पद्धति को कहते हैं। उदाहरण के लिए:

classifier.train(
        input_fn=lambda:train_input_fn(train_x, train_y, batch_size=100),
                steps=200)

जैसा कि निम्नलिखित आरेखों द्वारा सुझाया गया है, train लिए पहला कॉल चौकियों और अन्य फाइलों को model_dir निर्देशिका में model_dir :

ट्रेन को पहली कॉल ()।

UNIX- आधारित सिस्टम पर बनाई गई model_dir निर्देशिका में ऑब्जेक्ट्स को देखने के लिए, बस ls को निम्नानुसार कॉल करें:

$ ls -1 models/iris
checkpoint
events.out.tfevents.timestamp.hostname
graph.pbtxt
model.ckpt-1.data-00000-of-00001
model.ckpt-1.index
model.ckpt-1.meta
model.ckpt-200.data-00000-of-00001
model.ckpt-200.index
model.ckpt-200.meta

पूर्ववर्ती ls कमांड से पता चलता है कि एस्टिमेटर ने चरण 1 (प्रशिक्षण की शुरुआत) और 200 (प्रशिक्षण का अंत) पर चौकियों का निर्माण किया।

डिफ़ॉल्ट चेकपॉइंट निर्देशिका

यदि आप एस्टिमेटर के निर्माता में model_dir निर्दिष्ट नहीं करते हैं, तो एस्टीमेटर चेकप्वाइंट फाइलों को पायथन के tempfile.mkdtemp फ़ंक्शन द्वारा चुनी गई अस्थायी निर्देशिका में लिखता है। उदाहरण के लिए, निम्नलिखित एस्टिमेटर निर्माता model_dir तर्क को निर्दिष्ट नहीं करता है:

classifier = tf.estimator.DNNClassifier(
    feature_columns=my_feature_columns,
    hidden_units=[10, 10],
    n_classes=3)

print(classifier.model_dir)

tempfile.mkdtemp फ़ंक्शन आपके ऑपरेटिंग सिस्टम के लिए एक सुरक्षित, अस्थायी निर्देशिका चुनता है। उदाहरण के लिए, macOS पर एक विशिष्ट अस्थायी निर्देशिका कुछ इस तरह हो सकती है:

/var/folders/0s/5q9kfzfj3gx2knj0vj8p68yc00dhcr/T/tmpYm1Rwa

चेकपॉइंटिंग आवृत्ति

डिफ़ॉल्ट रूप से, अनुमानक निम्नलिखित अनुसूची के अनुसार model_dir में checkpoints को बचाता checkpoints :

  • हर 10 मिनट (600 सेकंड) पर एक चौकी लिखता है।
  • जब train विधि (पहली पुनरावृत्ति) शुरू होती है और पूर्णता (अंतिम पुनरावृत्ति) होती है, तो एक चौकी लिखती है।
  • निर्देशिका में केवल 5 सबसे हाल की चौकियों को रिटेन करता है।

आप निम्नलिखित कदम उठाकर डिफ़ॉल्ट शेड्यूल को बदल सकते हैं:

  1. एक RunConfig ऑब्जेक्ट बनाएं जो वांछित शेड्यूल को परिभाषित करता है।
  2. एस्टीमेटर को RunConfig , उस RunConfig ऑब्जेक्ट को एस्टिमेटर के config RunConfig पास करें।

उदाहरण के लिए, निम्न कोड प्रत्येक 20 मिनट में चेकपॉइंटिंग शेड्यूल को बदलता है और 10 सबसे हाल की चौकियों को बरकरार रखता है:

my_checkpointing_config = tf.estimator.RunConfig(
    save_checkpoints_secs = 20*60,  # Save checkpoints every 20 minutes.
    keep_checkpoint_max = 10,       # Retain the 10 most recent checkpoints.
)

classifier = tf.estimator.DNNClassifier(
    feature_columns=my_feature_columns,
    hidden_units=[10, 10],
    n_classes=3,
    model_dir='models/iris',
    config=my_checkpointing_config)

अपने मॉडल को पुनर्स्थापित करना

पहली बार जब आप एस्टिमेटर की train विधि कहते हैं, तो TensorFlow एक चेकपॉइंट को मॉडल_डिर में सहेजता है। एस्टीमेटर की train की प्रत्येक बाद की कॉल, evaluate या predict तरीका निम्नलिखित का कारण बनता है:

  1. एस्टीमेटर ने model_fn() चलाकर मॉडल का graph model_fn() । ( model_fn() पर विवरण के लिए, कस्टम अनुमानक बनाना देखें )
  2. एस्टीमेटर नए मॉडल के वजन को सबसे हालिया चेकपॉइंट में संग्रहीत डेटा से आरंभ करता है।

दूसरे शब्दों में, जैसा कि निम्नलिखित चित्रण से पता चलता है, एक बार चौकियों मौजूद होने के बाद, TensorFlow मॉडल को हर बार जब आप train() , evaluate() , या predict()

प्रशिक्षण के बाद की कॉल (), मूल्यांकन (), या भविष्यवाणी ()

एक खराब बहाली से बचना

एक चेकपॉइंट से मॉडल की स्थिति को पुनर्स्थापित करना केवल तभी काम करता है जब मॉडल और चेकपॉइंट संगत हों। उदाहरण के लिए, मान लें कि आपने DNNClassifier Estimator को प्रशिक्षित किया है जिसमें दो छिपी हुई परतें हैं, जिनमें से प्रत्येक में 10 नोड हैं:

classifier = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=[10, 10],
    n_classes=3,
    model_dir='models/iris')

classifier.train(
    input_fn=lambda:train_input_fn(train_x, train_y, batch_size=100),
        steps=200)

प्रशिक्षण के बाद (और इसलिए, models/iris में चौकियों को बनाने के बाद), कल्पना करें कि आपने प्रत्येक छिपी हुई परत में न्यूरॉन्स की संख्या को 10 से 20 तक बदल दिया और फिर मॉडल को फिर से अपनाने का प्रयास किया:

classifier2 = tf.estimator.DNNClassifier(
    feature_columns=my_feature_columns,
    hidden_units=[20, 20],  # Change the number of neurons in the model.
    n_classes=3,
    model_dir='models/iris')

classifier.train(
    input_fn=lambda:train_input_fn(train_x, train_y, batch_size=100),
        steps=200)

चूंकि classifier2 में वर्णित मॉडल के साथ चेकपॉइंट की स्थिति असंगत classifier2 , इसलिए निम्नलिखित त्रुटि के साथ फिर से प्रयास करना विफल रहता है:

...
InvalidArgumentError (see above for traceback): tensor_name =
dnn/hiddenlayer_1/bias/t_0/Adagrad; shape in shape_and_slice spec [10]
does not match the shape stored in checkpoint: [20]

उन प्रयोगों को चलाने के लिए जिनमें आप किसी मॉडल के थोड़े भिन्न संस्करणों को प्रशिक्षित करते हैं और तुलना करते हैं, प्रत्येक model_dir एक अलग गिट शाखा बनाकर, प्रत्येक model_dir को बनाने वाले कोड की एक प्रति को model_dir । यह पृथक्करण आपकी चौकियों को पुनर्प्राप्त करने योग्य बनाए रखेगा।

सारांश

चेकपॉइंट अनुमानकों द्वारा बनाए गए मॉडल को बचाने और बहाल करने के लिए एक आसान स्वचालित तंत्र प्रदान करता है।

विवरण के लिए टेन्सरफ्लो प्रोग्रामर गाइड की सेविंग और रिस्टोरिंग चैप्टर देखें:

  • निम्न-स्तरीय TensorFlow API का उपयोग करके मॉडल को सहेजना और पुनर्स्थापित करना।
  • SavedModel प्रारूप में मॉडल का निर्यात और आयात करना, जो एक भाषा-तटस्थ, पुनर्प्राप्त करने योग्य, क्रमांकन प्रारूप है।