টেনসরফ্লো কোনও ফাইল থেকে গ্রাফের মধ্যে লোড / লোড করা


101

আমি এ পর্যন্ত যা সংগ্রহ করেছি, সেগুলি থেকে টেনসরফ্লো গ্রাফটিকে একটি ফাইলে ডাম্প করার এবং পরে এটি অন্য প্রোগ্রামে লোড করার বিভিন্ন উপায় রয়েছে তবে তারা কীভাবে কাজ করে সে সম্পর্কে আমি পরিষ্কার উদাহরণ / তথ্য খুঁজে পাইনি। আমি ইতিমধ্যে যা জানি এটি হ'ল:

  1. মডেলটির ভেরিয়েবলগুলি একটি ব্যবহার করে একটি চেকপয়েন্ট ফাইল (.ckpt) এ সংরক্ষণ করুন tf.train.Saver()এবং সেগুলি পরে পুনরুদ্ধার করুন ( উত্স )
  2. একটি মডেলটিকে .pb ফাইলে সংরক্ষণ করুন এবং এটি ব্যবহার করে tf.train.write_graph()এবং tf.import_graph_def()( উত্স ) এ আবার লোড করুন
  3. একটি .pb ফাইল থেকে একটি মডেল লোড করুন, এটি পুনরায় প্রশিক্ষণ করুন এবং বাজেল ( উত্স ) ব্যবহার করে এটি একটি নতুন .pb ফাইলে ফেলে দিন
  4. গ্রাফটি সংরক্ষণ করুন এবং একসাথে ওজনগুলি সংরক্ষণ করুন ( উত্স )
  5. ব্যবহার করুন as_graph_def()মডেল রক্ষা করব | ওজন / ভেরিয়েবলের জন্য, (ধ্রুবক সেগুলি মানচিত্র উৎস )

তবে, আমি এই বিভিন্ন পদ্ধতি সম্পর্কে বেশ কয়েকটি প্রশ্ন পরিষ্কার করতে সক্ষম হইনি:

  1. চেকপয়েন্ট ফাইলগুলির বিষয়ে, তারা কি কেবল কোনও মডেলের প্রশিক্ষিত ওজন সংরক্ষণ করে? চেকপয়েন্ট ফাইলগুলি কোনও নতুন প্রোগ্রামে লোড করা যায়, এবং মডেলটি চালাতে ব্যবহৃত হতে পারে, বা এগুলি কেবল কোনও নির্দিষ্ট সময় / পর্যায়ে কোনও মডেলের ওজন বাঁচানোর উপায় হিসাবে কাজ করে?
  2. সম্পর্কিত tf.train.write_graph(), ওজন / ভেরিয়েবলগুলিও কি সংরক্ষণ করা যায়?
  3. বাজেল সম্পর্কিত, এটি পুনরায় প্রশিক্ষণের জন্য .pb ফাইলগুলি থেকে কেবল / লোডে সঞ্চয় করতে পারে? কেবলমাত্র একটি .pb তে কোনও গ্রাফ ডাম্প করার জন্য কি একটি সহজ বাজেল কমান্ড রয়েছে?
  4. হিমাংশের বিষয়ে, কোনও হিমশীতল গ্রাফ ব্যবহার করে লোড করা যায় tf.import_graph_def()?
  5. টেনসরফ্লোর জন্য অ্যান্ড্রয়েড ডেমো একটি .pb ফাইল থেকে গুগলের ইনসেপশন মডেলে লোড করে। আমি যদি আমার নিজের পিপিবি ফাইলটি বিকল্প হিসাবে নিতে চাই, তবে আমি কীভাবে এটি করতে যাব? আমার কি কোনও নেটিভ কোড / পদ্ধতি পরিবর্তন করতে হবে?
  6. সাধারণভাবে, এই সমস্ত পদ্ধতির মধ্যে ঠিক পার্থক্য কী? বা আরও বিস্তৃতভাবে, as_graph_def()/.ckpt/.pb এর মধ্যে পার্থক্য কী?

সংক্ষেপে, আমি যা খুঁজছি তা হ'ল একটি গ্রাফ (যেমন, বিভিন্ন ক্রিয়াকলাপ এবং যেমন) এবং এর ওজন / ভেরিয়েবলগুলি একটি ফাইলে সংরক্ষণ করা যায় যা গ্রাফ এবং ওজনকে অন্য প্রোগ্রামে লোড করতে ব্যবহার করা যেতে পারে , ব্যবহারের জন্য (অগত্যা চালিয়ে / পুনরায় প্রশিক্ষণের প্রয়োজন হয় না)।

এই বিষয় সম্পর্কে ডকুমেন্টেশন খুব সোজা না, সুতরাং কোনও উত্তর / তথ্য প্রশংসা করা হবে।


4
সর্বাধিক নতুন / সম্পূর্ণ এপিআইটি হ'ল মেটা গ্রাফ, এটি আপনাকে তিনটি একবারে সংরক্ষণ করার উপায় দেয় - 1) গ্রাফ 2) প্যারামিটারের মান 3) সংগ্রহ: tensorflow.org/versions/r0.10/how_tos/meta_ographic/ index.html
ইয়ারোস্লাভ বুলাটোভ

উত্তর:


81

টেনসরফ্লোতে কোনও মডেল সংরক্ষণের সমস্যাটির কাছে যাওয়ার অনেক উপায় রয়েছে যা এটিকে কিছুটা বিভ্রান্ত করতে পারে। আপনার প্রতিটি উপ-প্রশ্নকে ঘুরে ফিরে নেওয়া:

  1. চেকপয়েন্ট ফাইলগুলি (যেমন saver.save()কোনও tf.train.Saverবস্তুর উপর কল করে উত্পাদিত ) কেবলমাত্র ওজন এবং একই প্রোগ্রামে সংজ্ঞায়িত অন্য কোনও ভেরিয়েবল ধারণ করে। এগুলিকে অন্য প্রোগ্রামে ব্যবহার করতে, আপনাকে অবশ্যই সংশ্লিষ্ট গ্রাফ কাঠামোটি পুনরায় তৈরি করতে হবে (উদাহরণস্বরূপ এটি আবার তৈরি করার জন্য কোড চালিয়ে বা কল করে tf.import_graph_def()), যা টেনসরফ্লোকে those ওজনগুলির সাথে কী করতে হবে তা বলে। নোট করুন যে কলিং saver.save()একটিতে একটি ফাইলও তৈরি করে MetaGraphDefযা একটি গ্রাফ এবং সেই গ্রাফের সাথে চেকপয়েন্ট থেকে ওজনগুলি কীভাবে যুক্ত করতে হবে তার বিশদ রয়েছে। আরও বিশদ জন্য টিউটোরিয়াল দেখুন ।

  2. tf.train.write_graph()কেবল গ্রাফের কাঠামো লিখেছেন; ওজন নয়

  3. টেনসরফ্লো গ্রাফগুলি পড়া বা লেখার সাথে বেজেল সম্পর্কিত নয়। (সম্ভবত আমি আপনার প্রশ্নটি ভুল বুঝেছি: একটি মন্তব্যে এটি নির্দ্বিধায় নির্দ্বিধায়)

  4. হিমায়িত গ্রাফটি ব্যবহার করে লোড করা যায় tf.import_graph_def()। এই ক্ষেত্রে, ওজনগুলি (সাধারণত) গ্রাফটিতে এম্বেড থাকে, সুতরাং আপনার আলাদা চেকপয়েন্ট লোড করার দরকার নেই।

  5. মূল পরিবর্তনটি হ'ল মডেলটিতে খাওয়ানো টেনসর (গুলি) এবং মডেল থেকে প্রাপ্ত টেন্সরের (গুলি) নামগুলি আপডেট করা। টেনসরফ্লো অ্যান্ড্রয়েড ডেমোতে, এটি পাস করা স্ট্রিং inputNameএবং outputNameস্ট্রিংগুলির সাথে মিলে যায় TensorFlowClassifier.initializeTensorFlow()

  6. GraphDefপ্রোগ্রাম গঠন, যা সাধারণত প্রশিক্ষণ প্রক্রিয়ার মধ্য দিয়ে পরিবর্তন করে না হয়। চেকপয়েন্ট হ'ল একটি প্রশিক্ষণ প্রক্রিয়ার রাজ্যের স্ন্যাপশট, যা সাধারণত প্রশিক্ষণ প্রক্রিয়ার প্রতিটি ধাপে পরিবর্তিত হয়। ফলস্বরূপ, টেনসরফ্লো এই ধরণের ডেটার জন্য বিভিন্ন স্টোরেজ ফর্ম্যাট ব্যবহার করে এবং নিম্ন-স্তরের এপিআই সেগুলি সংরক্ষণ এবং লোড করার বিভিন্ন উপায় সরবরাহ করে। একটি সম্পূর্ণ মডেল সংরক্ষণ এবং পুনরুদ্ধার করার জন্য আরও সুবিধাজনক উপায়গুলি সরবরাহ করার জন্য উচ্চ-স্তরের গ্রন্থাগারগুলি, যেমন MetaGraphDefগ্রন্থাগারগুলি, কেরাস এবং স্ক্লোফোরগুলি এই পদ্ধতিগুলিতে তৈরি করে।


এর অর্থ কি সি ++ এপিআই ডকুমেন্টেশন মিথ্যা বলে, যখন এটি বলে যে আপনি সংরক্ষণ করা গ্রাফটি লোড করতে পারেন tf.train.write_graph()এবং তারপরে এটি কার্যকর করতে পারেন?
mnicky

4
সি ++ এপিআই ডকুমেন্টেশন মিথ্যা বলে না, তবে এটিতে কয়েকটি বিবরণ অনুপস্থিত। সর্বাধিক গুরুত্বপূর্ণ বিশদটি হ'ল, GraphDefসংরক্ষণ করা ছাড়াও tf.train.write_graph(), গ্রাফটি সম্পাদন করার সময় আপনি যে টেনসরদের খাওয়াতে এবং আনতে চান সেগুলির নামগুলিও মনে রাখতে হবে (উপরের আইটেম 5)।

@ শ্রীঃ আমি টেনসরফ্লোস ডিপড্রিম উদাহরণ ব্যবহার করার চেষ্টা করেছি। তবে মনে হচ্ছে এটি পিবি ফর্ম্যাটে প্রিটেইনড মডেলগুলির প্রয়োজন! আমি সিফার 10 উদাহরণটি চালিয়েছি, তবে এটি কেবল চেকপয়েন্ট তৈরি করে! আমি কোনও পিবি ফাইল বা যা কিছু খুঁজে পাচ্ছিলাম না! আমি কীভাবে আমার চেকপয়েন্টগুলিকে পিবি ফর্ম্যাটে রূপান্তর করতে পারি যা ডিপড্রিম উদাহরণ ব্যবহার করে?
রিকা

4
@ কোডারেক্স 7 আমি সত্যিই মনে করি আপনি একটি। পিপিকে একটি পিপিতে রূপান্তর করতে পারবেন না কারণ চেকপয়েন্টে কেবল ওজন এবং ভেরিয়েবল রয়েছে এবং গ্রাফের কাঠামো সম্পর্কে কিছুই জানে না
ডেভিডিবাদ

4
একটি .pb ফাইল লোড করার এবং তারপর এটি চালানোর জন্য কি কোনও সাধারণ কোড আছে?
কং

1

আপনি নিম্নলিখিত কোড চেষ্টা করতে পারেন:

with tf.gfile.FastGFile('model/frozen_inference_graph.pb', "rb") as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    g_in = tf.import_graph_def(graph_def, name="")
sess = tf.Session(graph=g_in)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.