টেনসরফ্লো হাবের সাথে TF1 থেকে TF2 তে স্থানান্তর করা হচ্ছে

এই পৃষ্ঠাটি ব্যাখ্যা করে যে কীভাবে আপনার টেনসরফ্লো কোড টেনসরফ্লো 1 থেকে টেনসরফ্লো 2-তে স্থানান্তরিত করার সময় টেনসরফ্লো হাব ব্যবহার চালিয়ে যেতে হবে। এটি টেনসরফ্লো-এর সাধারণ মাইগ্রেশন গাইডের পরিপূরক।

TF2-এর জন্য, tf.contrib.v1.layers এর মতো tf.compat.v1.Graph তৈরির জন্য TF Hub লিগ্যাসি hub.Module API থেকে দূরে সরে গেছে। পরিবর্তে, এখন একটি hub.KerasLayer রয়েছে একটি tf.keras.Model (সাধারণত TF2-এর নতুন উদ্যমী এক্সিকিউশন এনভায়রনমেন্টে ) এবং নিম্ন-স্তরের TensorFlow কোডের জন্য এর অন্তর্নিহিত hub.load() পদ্ধতি নির্মাণের জন্য অন্যান্য কেরাস স্তরগুলির সাথে ব্যবহারের জন্য।

hub.Module API TF1 এবং TF2 এর TF1 সামঞ্জস্য মোডে ব্যবহারের জন্য tensorflow_hub লাইব্রেরিতে উপলব্ধ থাকে। এটি শুধুমাত্র TF1 হাব ফরম্যাটে মডেল লোড করতে পারে।

hub.load() এবং hub.KerasLayer এর নতুন API TensorFlow 1.15 (আগ্রহী এবং গ্রাফ মোডে) এবং TensorFlow 2-এর জন্য কাজ করে৷ এই নতুন API নতুন TF2 সংরক্ষিত মডেল সম্পদগুলিকে লোড করতে পারে এবং, মডেলে দেওয়া বিধিনিষেধ সহ সামঞ্জস্য নির্দেশিকা , TF1 হাব বিন্যাসে উত্তরাধিকার মডেল।

সাধারণভাবে, যেখানেই সম্ভব নতুন API ব্যবহার করার পরামর্শ দেওয়া হয়।

নতুন API এর সারাংশ

hub.load() হল নতুন নিম্ন-স্তরের ফাংশন যা টেনসরফ্লো হাব (বা সামঞ্জস্যপূর্ণ পরিষেবা) থেকে একটি সংরক্ষিত মডেল লোড করার জন্য। এটি TF2 এর tf.saved_model.load() ; TensorFlow এর SavedModel গাইড বর্ণনা করে যে আপনি ফলাফল দিয়ে কি করতে পারেন।

m = hub.load(handle)
outputs = m(inputs)

hub.KerasLayer ক্লাস hub.load() কল করে এবং অন্যান্য কেরা স্তরগুলির সাথে কেরাসে ব্যবহারের জন্য ফলাফলকে অভিযোজিত করে। (অন্যান্য উপায়ে ব্যবহৃত লোড করা সংরক্ষিত মডেলগুলির জন্য এটি একটি সুবিধাজনক মোড়ক হতে পারে।)

model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])

অনেক টিউটোরিয়াল এই API গুলিকে কাজ করে দেখায়। এখানে কিছু উদাহরণঃ:

এস্টিমেটর প্রশিক্ষণে নতুন API ব্যবহার করা

আপনি যদি প্যারামিটার সার্ভারগুলির সাথে প্রশিক্ষণের জন্য একটি অনুমানকারীতে একটি TF2 সংরক্ষিত মডেল ব্যবহার করেন (অথবা অন্যথায় দূরবর্তী ডিভাইসগুলিতে রাখা ভেরিয়েবল সহ একটি TF1 সেশনে), আপনাকে tf.Session-এর ConfigProto-এ experimental.share_cluster_devices_in_session সেট করতে হবে, অন্যথায় আপনি একটি ত্রুটি পাবেন যেমন "অ্যাসাইন করা ডিভাইস '/job:ps/replica:0/task:0/device:CPU:0' কোনো ডিভাইসের সাথে মেলে না।"

প্রয়োজনীয় বিকল্প মত সেট করা যেতে পারে

session_config = tf.compat.v1.ConfigProto()
session_config.experimental.share_cluster_devices_in_session = True
run_config = tf.estimator.RunConfig(..., session_config=session_config)
estimator = tf.estimator.Estimator(..., config=run_config)

TF2.2 দিয়ে শুরু করে, এই বিকল্পটি আর পরীক্ষামূলক নয়, এবং .experimental অংশটি বাদ দেওয়া যেতে পারে।

TF1 হাব ফর্ম্যাটে লিগ্যাসি মডেল লোড করা হচ্ছে

এটি ঘটতে পারে যে আপনার ব্যবহারের ক্ষেত্রে একটি নতুন TF2 SavedModel এখনও উপলব্ধ নয় এবং আপনাকে TF1 হাব ফর্ম্যাটে একটি লিগ্যাসি মডেল লোড করতে হবে৷ tensorflow_hub রিলিজ 0.7 থেকে শুরু করে, আপনি hub.KerasLayer এর সাথে TF1 হাব ফরম্যাটে লিগ্যাসি মডেল ব্যবহার করতে পারেন যা নীচে দেখানো হয়েছে:

m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)

অতিরিক্তভাবে KerasLayer TF1 হাব ফরম্যাটে এবং লিগ্যাসি সেভডমডেল-এ লিগ্যাসি মডেলের আরও নির্দিষ্ট ব্যবহারের জন্য tags , signature , output_key এবং signature_outputs_as_dict নির্দিষ্ট করার ক্ষমতা প্রকাশ করে।

TF1 হাব ফর্ম্যাট সামঞ্জস্য সম্পর্কে আরও তথ্যের জন্য মডেল সামঞ্জস্য নির্দেশিকা দেখুন।

নিম্ন স্তরের API ব্যবহার করে

লিগ্যাসি TF1 হাব ফর্ম্যাট মডেলগুলি tf.saved_model.load এর মাধ্যমে লোড করা যেতে পারে। পরিবর্তে

# DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)

এটি ব্যবহার করার জন্য সুপারিশ করা হয়:

# TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)

এই উদাহরণগুলিতে m.signatures হল TensorFlow কংক্রিট ফাংশনের একটি ডিক্ট যা স্বাক্ষরের নাম দ্বারা চাবি করা হয়। এই ধরনের একটি ফাংশন কল করা তার সমস্ত আউটপুট গণনা করে, এমনকি অব্যবহৃত হলেও। (এটি TF1 এর গ্রাফ মোডের অলস মূল্যায়ন থেকে ভিন্ন।)