টেনসরফ্লো, মডেলটি সংরক্ষণের পরে কেন 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")

টেনসরফ্লো সংরক্ষণ পদ্ধতিটি তিন ধরণের ফাইল সংরক্ষণ করে কারণ এটি গ্রাফ কাঠামোটি ভেরিয়েবলের মান থেকে পৃথক করে সংরক্ষণ করে । .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 টি ফাইল কখন ব্যবহৃত হয়?
ajfbiw.s

26
@ ajfbiw.s .meta গ্রাফ কাঠামো সংরক্ষণ করে, .ডাটা গ্রাফের প্রতিটি ভেরিয়েবলের মান সংরক্ষণ করে, .index চেকপিয়ন্টটি সনাক্ত করে। সুতরাং উপরের উদাহরণে: আমদানি_মেটা_গ্রাফ।। মেটা ব্যবহার করে এবং সেভার.রেস্টোর .data এবং .index ব্যবহার করে
টি কে বার্টেল

আচ্ছা বুঝলাম. ধন্যবাদ।
ajfbiw.s

1
আপনি মডেলটিকে টেনসরফ্লো লোড করার জন্য ব্যবহার করছেন তার চেয়ে আলাদা সংস্করণে সেভ করার কোনও সুযোগ? ( 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

  • সূচি ফাইল : এটি একটি স্ট্রিং-স্ট্রিং অপরিবর্তনীয় টেবিল (টেনসরফ্লো :: টেবিল :: টেবিল)। প্রতিটি কীটি একটি সেন্সরটির নাম এবং এর মান একটি সিরিয়ালযুক্ত বান্ডিলএন্ট্রিপ্রোটো। প্রতিটি বান্ডিলএন্ট্রিপ্রোটো একটি টেন্সরের মেটাডেটা বর্ণনা করে: কোনটি "ডেটা" ফাইলটিতে কোনও টেনসারের সামগ্রী রয়েছে, সেই ফাইলটিতে অফসেট, চেকসাম, কিছু সহায়ক ডেটা ইত্যাদি রয়েছে contains

  • ডেটা ফাইল : এটি টেনসরবান্ডেল সংগ্রহ, সমস্ত ভেরিয়েবলের মান সংরক্ষণ করুন।


চিত্রের শ্রেণিবদ্ধকরণের জন্য আমার কাছে যে পিবি ফাইল রয়েছে তা পেয়েছি। আমি কি এটি রিয়েলটাইম ভিডিও শ্রেণিবিন্যাসের জন্য ব্যবহার করতে পারি?

আপনি কি দয়া করে আমাকে জানান, কেরাস 2 ব্যবহার করে, যদি মডেলটি 3 টি ফাইল হিসাবে সংরক্ষণ করা হয় তবে আমি কীভাবে লোড করব?
রাজকিরণ

5

আমি ওয়ার্ড 2 ভেক টেনসরফ্লো টিউটোরিয়াল থেকে প্রশিক্ষিত শব্দ এম্বেডিংগুলি পুনরুদ্ধার করছি ।

আপনি একাধিক চেকপয়েন্ট তৈরি করেছেন:

উদাহরণস্বরূপ তৈরি করা ফাইলগুলি এর মতো দেখতে

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")

"Model.ckpt-55695.data-00000-of-00001" "00000-of-00001" এর অর্থ কী?
hafiz031

0

আপনি যদি সিএনএনকে ড্রপআউট দিয়ে প্রশিক্ষিত করেন, উদাহরণস্বরূপ, আপনি এটি করতে পারেন:

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})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.