TensorFlow 2 বিভিন্ন উপায়ে TF1.x থেকে মৌলিকভাবে আলাদা। আপনি এখনও TF2 বাইনারি ইনস্টলেশনের বিরুদ্ধে অপরিবর্তিত TF1.x কোড ( contrib ব্যতীত ) চালাতে পারেন:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
যাইহোক, এটি TF2 আচরণ এবং API চালাচ্ছে না এবং TF2 এর জন্য লেখা কোডের সাথে প্রত্যাশিতভাবে কাজ নাও করতে পারে। আপনি যদি TF2 আচরণ সক্রিয় না করে থাকেন, তাহলে আপনি কার্যকরভাবে TF2 ইনস্টলেশনের উপরে TF1.x চালাচ্ছেন। TF1.x থেকে TF2 কীভাবে আলাদা সে সম্পর্কে আরও বিস্তারিত জানার জন্য TF1 বনাম TF2 আচরণ নির্দেশিকা পড়ুন।
এই নির্দেশিকাটি আপনার TF1.x কোডকে TF2 এ স্থানান্তরিত করার প্রক্রিয়ার একটি ওভারভিউ প্রদান করে। এটি আপনাকে নতুন এবং ভবিষ্যতের বৈশিষ্ট্যের উন্নতিগুলির সুবিধা নিতে এবং আপনার কোডকে আরও সহজ, আরও কার্যকারিতা এবং বজায় রাখা সহজ করে তুলতে সক্ষম করে৷
আপনি যদি tf.keras
এর উচ্চ স্তরের API ব্যবহার করেন এবং model.fit
এর সাথে একচেটিয়াভাবে প্রশিক্ষণ নেন, তাহলে নিম্নলিখিত সতর্কতাগুলি ব্যতীত আপনার কোডটি কমবেশি TF2 এর সাথে সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ হওয়া উচিত:
- কেরাস অপ্টিমাইজারদের জন্য TF2 এর নতুন ডিফল্ট শেখার হার রয়েছে।
- TF2 মেট্রিক্স লগ করা "নাম" পরিবর্তন করতে পারে ।
TF2 মাইগ্রেশন প্রক্রিয়া
মাইগ্রেট করার আগে, গাইডটি পড়ে TF1.x এবং TF2 এর মধ্যে আচরণ এবং API পার্থক্য সম্পর্কে জানুন।
- আপনার কিছু TF1.x API ব্যবহারকে
tf.compat.v1
তে রূপান্তর করতে স্বয়ংক্রিয় স্ক্রিপ্ট চালান। - পুরানো
tf.contrib
চিহ্নগুলি সরান ( TF Addons এবং TF-Slim চেক করুন)। - আপনার TF1.x মডেলের ফরোয়ার্ড পাসগুলিকে TF2 তে চালিত করুন এবং আগ্রহী সম্পাদন সক্ষম করুন৷
- প্রশিক্ষণ লুপ এবং TF2 সমতুল্য মডেল সংরক্ষণ/লোড করার জন্য আপনার TF1.x কোড আপগ্রেড করুন।
- (ঐচ্ছিক) আপনার TF2-সামঞ্জস্যপূর্ণ
tf.compat.v1
এপিআইগুলিকে ইডিওম্যাটিক TF2 APIগুলিতে স্থানান্তর করুন৷
নিম্নলিখিত বিভাগগুলি উপরে বর্ণিত ধাপগুলির উপর প্রসারিত হয়।
প্রতীক রূপান্তর স্ক্রিপ্ট চালান
এটি TF 2.x বাইনারিগুলির বিরুদ্ধে চালানোর জন্য আপনার কোড চিহ্নগুলিকে পুনরায় লেখার একটি প্রাথমিক পাস কার্যকর করে, তবে এটি আপনার কোডকে TF 2.x-এ মূর্খতাপূর্ণ করে তুলবে না বা এটি স্বয়ংক্রিয়ভাবে আপনার কোডটিকে TF2 আচরণের সাথে সামঞ্জস্যপূর্ণ করে তুলবে না।
আপনার কোড সম্ভবত এখনও প্লেসহোল্ডার, সেশন, সংগ্রহ এবং অন্যান্য TF1.x-স্টাইল কার্যকারিতা অ্যাক্সেস করতে tf.compat.v1
এন্ডপয়েন্ট ব্যবহার করবে।
প্রতীক রূপান্তর স্ক্রিপ্ট ব্যবহার করার জন্য সর্বোত্তম অনুশীলন সম্পর্কে আরও জানতে গাইডটি পড়ুন।
tf.contrib
এর ব্যবহার সরান
tf.contrib
মডিউলটি সানসেট করা হয়েছে এবং এর বেশ কয়েকটি সাবমডিউল মূল TF2 API-তে একীভূত করা হয়েছে। অন্যান্য সাবমডিউলগুলি এখন TF IO এবং TF Addons- এর মতো অন্যান্য প্রকল্পে চালু করা হয়েছে।
প্রচুর পরিমাণে পুরানো TF1.x কোড স্লিম লাইব্রেরি ব্যবহার করে, যা tf.contrib.layers
হিসাবে TF1.x দিয়ে প্যাকেজ করা হয়েছিল। আপনার স্লিম কোড টিএফ২-এ স্থানান্তরিত করার সময়, tf-স্লিম পিপ প্যাকেজের দিকে নির্দেশ করতে আপনার স্লিম API ব্যবহারগুলি পরিবর্তন করুন। তারপরে, কিভাবে স্লিম কোড রূপান্তর করতে হয় তা শিখতে মডেল ম্যাপিং গাইড পড়ুন।
বিকল্পভাবে, আপনি যদি স্লিম প্রাক-প্রশিক্ষিত মডেলগুলি ব্যবহার করেন তবে আপনি tf.keras.applications
বা TF Hub- এর TF2 SavedModel
মূল স্লিম কোড থেকে রপ্তানি করা থেকে কেরাসের প্রি-ট্রেইমড মডেলগুলি চেষ্টা করার কথা বিবেচনা করতে পারেন।
TF1.x মডেলের ফরোয়ার্ড পাসগুলিকে TF2 আচরণ সক্ষম করে চালান
ভেরিয়েবল এবং ক্ষতি ট্র্যাক
TF2 বিশ্বব্যাপী সংগ্রহ সমর্থন করে না।
TF2-এ আগ্রহী সঞ্চালন tf.Graph
সংগ্রহ-ভিত্তিক API সমর্থন করে না। আপনি কিভাবে ভেরিয়েবল নির্মাণ এবং ট্র্যাক করেন তা প্রভাবিত করে।
নতুন TF2 কোডের জন্য আপনি v1.get_variable
এর পরিবর্তে tf.Variable
ব্যবহার করবেন এবং tf.compat.v1.variable_scope
এর পরিবর্তে ভেরিয়েবল সংগ্রহ ও ট্র্যাক করতে পাইথন অবজেক্ট ব্যবহার করবেন। সাধারণত এটি একটি হবে:
Layer
, Module
বা Model
অবজেক্টের .variables
এবং .trainable_variables
বৈশিষ্ট্য সহ ভেরিয়েবলের সমষ্টি তালিকা (যেমন tf.Graph.get_collection(tf.GraphKeys.VARIABLES)
)।
Layer
এবং Model
ক্লাসগুলি অন্যান্য বেশ কয়েকটি বৈশিষ্ট্য প্রয়োগ করে যা বিশ্বব্যাপী সংগ্রহের প্রয়োজনীয়তা দূর করে। তাদের .losses
সম্পত্তি tf.GraphKeys.LOSSES
সংগ্রহ ব্যবহার করার জন্য একটি প্রতিস্থাপন হতে পারে।
Layers
, Models
এবং Modules
ভিতরে আপনার বিদ্যমান get_variable
এবং variable_scope
ভিত্তিক কোড এমবেড করতে TF2 কোড মডেলিং শিমস ব্যবহার করার বিষয়ে আরও জানতে মডেল ম্যাপিং গাইড পড়ুন। এটি আপনাকে বড় পুনঃলিখন ছাড়াই আগ্রহী সম্পাদনের সাথে এগিয়ে পাসগুলি সম্পাদন করতে দেবে।
অন্যান্য আচরণ পরিবর্তনের সাথে খাপ খাইয়ে নেওয়া
যদি মডেল ম্যাপিং গাইডটি নিজে থেকে আপনার মডেল ফরোয়ার্ড পাসের জন্য অপর্যাপ্ত হয় তবে অন্যান্য আচরণ পরিবর্তনগুলি যা আরও বিশদ হতে পারে, অন্যান্য আচরণের পরিবর্তনগুলি এবং আপনি কীভাবে তাদের সাথে মানিয়ে নিতে পারেন সে সম্পর্কে জানতে TF1.x বনাম TF2 আচরণের নির্দেশিকাটি দেখুন . এছাড়াও বিশদ বিবরণের জন্য সাবক্লাসিং গাইডের মাধ্যমে নতুন স্তর এবং মডেল তৈরির পরীক্ষা করুন।
আপনার ফলাফল যাচাই করা হচ্ছে
আপনি কিভাবে (সংখ্যাগতভাবে) যাচাই করতে পারেন যে আপনার মডেলটি সঠিকভাবে কাজ করছে যখন আগ্রহী সম্পাদন সক্ষম করা হয় তখন সহজ সরঞ্জাম এবং নির্দেশনার জন্য মডেল যাচাইকরণ গাইডটি দেখুন। মডেল ম্যাপিং গাইডের সাথে পেয়ার করার সময় আপনি এটি বিশেষভাবে দরকারী বলে মনে করতে পারেন৷
প্রশিক্ষণ, মূল্যায়ন, এবং আমদানি/রপ্তানি কোড আপগ্রেড করুন
v1.Session
-style tf.estimator.Estimator
s সহ নির্মিত TF1.x প্রশিক্ষণ লুপ এবং অন্যান্য সংগ্রহ-ভিত্তিক পদ্ধতিগুলি TF2 এর নতুন আচরণের সাথে সামঞ্জস্যপূর্ণ নয়। এটি গুরুত্বপূর্ণ যে আপনি আপনার সমস্ত TF1.x প্রশিক্ষণ কোড স্থানান্তর করুন কারণ এটি TF2 কোডের সাথে একত্রিত হলে অপ্রত্যাশিত আচরণ হতে পারে।
এটি করার জন্য আপনি বিভিন্ন কৌশলের মধ্যে থেকে বেছে নিতে পারেন।
সর্বোচ্চ-স্তরের পদ্ধতি হল tf.keras
ব্যবহার করা। কেরাসের উচ্চ স্তরের ফাংশনগুলি অনেক নিম্ন-স্তরের বিবরণ পরিচালনা করে যা আপনি নিজের প্রশিক্ষণ লুপ লিখলে মিস করা সহজ হতে পারে। উদাহরণস্বরূপ, তারা স্বয়ংক্রিয়ভাবে নিয়মিতকরণের ক্ষতি সংগ্রহ করে এবং মডেলটিকে কল করার সময় training=True
যুক্তি সেট করে।
ভ্যানিলা এবং কাস্টম tf.keras
প্রশিক্ষণ লুপ ব্যবহার করতে আপনি কিভাবে tf.estimator.Estimator
এর কোড স্থানান্তর করতে পারেন তা জানতে অনুমানকারী মাইগ্রেশন গাইড পড়ুন।
কাস্টম প্রশিক্ষণ লুপগুলি আপনাকে আপনার মডেলের উপর সূক্ষ্ম নিয়ন্ত্রণ দেয় যেমন পৃথক স্তরগুলির ওজন ট্র্যাক করা। মডেলের ওজন পুনরুদ্ধার করতে tf.GradientTape
কীভাবে ব্যবহার করতে হয় এবং মডেল আপডেট করতে সেগুলি ব্যবহার করতে হয় তা শিখতে স্ক্র্যাচ থেকে প্রশিক্ষণ লুপ তৈরির নির্দেশিকা পড়ুন।
TF1.x অপটিমাইজারকে কেরাস অপটিমাইজারে রূপান্তর করুন
tf.compat.v1.train
এর অপ্টিমাইজার, যেমন অ্যাডাম অপ্টিমাইজার এবং গ্রেডিয়েন্ট ডিসেন্ট অপ্টিমাইজার , tf.keras.optimizers
এর সমতুল্য।
নীচের সারণীটি সংক্ষিপ্ত করে যে আপনি কীভাবে এই লিগ্যাসি অপ্টিমাইজারগুলিকে তাদের কেরাস সমতুল্যগুলিতে রূপান্তর করতে পারেন৷ আপনি সরাসরি TF1.x সংস্করণটিকে TF2 সংস্করণের সাথে প্রতিস্থাপন করতে পারেন যদি না অতিরিক্ত পদক্ষেপ (যেমন ডিফল্ট শেখার হার আপডেট করা ) প্রয়োজন হয়।
মনে রাখবেন যে আপনার অপ্টিমাইজারগুলিকে রূপান্তর করা পুরানো চেকপয়েন্টগুলিকে বেমানান করে তুলতে পারে ৷
TF1.x | TF2 | অতিরিক্ত পদক্ষেপ |
---|---|---|
`tf.v1.train.GradientDescentOptimizer` | tf.keras.optimizers.SGD | কোনোটিই নয় |
`tf.v1.train.MomentumOptimizer` | tf.keras.optimizers.SGD | 'মোমেন্টাম' যুক্তি অন্তর্ভুক্ত করুন |
`tf.v1.train.AdamOptimizer` | tf.keras.optimizers.Adam | `beta1` এবং `beta2` আর্গুমেন্টের নাম পরিবর্তন করে `beta_1` এবং `beta_2` এ |
`tf.v1.train.RMSPropOptimizer` | tf.keras.optimizers.RMSprop | `ক্ষয়` আর্গুমেন্টের নাম পরিবর্তন করে `rho` করুন |
`tf.v1.train.AdadeltaOptimizer` | tf.keras.optimizers.Adadelta | কোনোটিই নয় |
`tf.v1.train.AdagradOptimizer` | tf.keras.optimizers.Adagrad | কোনোটিই নয় |
`tf.v1.train.FtrlOptimizer` | tf.keras.optimizers.Ftrl | `accum_name` এবং `linear_name` আর্গুমেন্টগুলি সরান |
`tf.contrib.AdamaxOptimizer` | tf.keras.optimizers.Adamax | `beta1`, এবং `beta2` আর্গুমেন্টের নাম পরিবর্তন করে `beta_1` এবং `beta_2` করুন |
`tf.contrib.Nadam` | tf.keras.optimizers.Nadam | `beta1`, এবং `beta2` আর্গুমেন্টের নাম পরিবর্তন করে `beta_1` এবং `beta_2` করুন |
ডেটা ইনপুট পাইপলাইন আপগ্রেড করুন
একটি tf.keras
মডেলে ডেটা ফিড করার অনেক উপায় আছে। তারা পাইথন জেনারেটর এবং নম্পি অ্যারেকে ইনপুট হিসাবে গ্রহণ করবে।
একটি মডেলে ডেটা ফিড করার প্রস্তাবিত উপায় হল tf.data
প্যাকেজটি ব্যবহার করা, যাতে ডেটা ম্যানিপুলেট করার জন্য উচ্চ কর্মক্ষমতা ক্লাসের একটি সংগ্রহ রয়েছে। tf.data
এর অন্তর্গত dataset
দক্ষ, অভিব্যক্তিপূর্ণ এবং TF2 এর সাথে ভালভাবে সংহত।
এগুলি সরাসরি tf.keras.Model.fit
পদ্ধতিতে পাস করা যেতে পারে।
model.fit(dataset, epochs=5)
এগুলি সরাসরি স্ট্যান্ডার্ড পাইথনের উপর পুনরাবৃত্তি করা যেতে পারে:
for example_batch, label_batch in dataset:
break
আপনি যদি এখনও tf.queue
ব্যবহার করে থাকেন তবে এগুলি এখন শুধুমাত্র ডেটা-স্ট্রাকচার হিসাবে সমর্থিত, ইনপুট পাইপলাইন হিসাবে নয়।
এছাড়াও আপনার সমস্ত বৈশিষ্ট্য প্রিপ্রসেসিং কোড স্থানান্তর করা উচিত যা tf.feature_columns
ব্যবহার করে। আরো বিস্তারিত জানার জন্য মাইগ্রেশন গাইড পড়ুন.
সংরক্ষণ এবং মডেল লোড হচ্ছে
TF2 অবজেক্ট-ভিত্তিক চেকপয়েন্ট ব্যবহার করে। নাম-ভিত্তিক TF1.x চেকপয়েন্টগুলি স্থানান্তরিত করার বিষয়ে আরও জানতে চেকপয়েন্ট মাইগ্রেশন গাইড পড়ুন। এছাড়াও মূল TensorFlow ডক্সে চেকপয়েন্ট গাইড পড়ুন।
সংরক্ষিত মডেলগুলির জন্য কোন উল্লেখযোগ্য সামঞ্জস্যের উদ্বেগ নেই। TF1.x-এ SavedModel
কে TF2-এ স্থানান্তরিত করার বিষয়ে আরও তথ্যের জন্য SavedModel
গাইড পড়ুন। সাধারণভাবে,
- TF1.x saved_models TF2 এ কাজ করে।
- TF2 saved_models TF1.x এ কাজ করে যদি সমস্ত অপ্স সমর্থিত হয়।
এছাড়াও Graph.pb
এবং Graph.pbtxt
অবজেক্টের সাথে কাজ করার বিষয়ে আরও তথ্যের জন্য SavedModel
মাইগ্রেশন গাইডের GraphDef
বিভাগটি দেখুন।
(ঐচ্ছিক) tf.compat.v1
চিহ্ন বন্ধ করুন
tf.compat.v1
মডিউলটিতে সম্পূর্ণ TF1.x API রয়েছে, এর মূল শব্দার্থবিদ্যা সহ।
এমনকি উপরের পদক্ষেপগুলি অনুসরণ করার পরে এবং সমস্ত TF2 আচরণের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ কোডের সাথে শেষ হওয়ার পরেও, সম্ভবত compat.v1
এপিস-এর অনেক উল্লেখ থাকতে পারে যা TF2 এর সাথে সামঞ্জস্যপূর্ণ। আপনি যে নতুন কোড লিখছেন তার জন্য এই লিগ্যাসি compat.v1
apis ব্যবহার করা এড়িয়ে চলা উচিত, যদিও তারা আপনার ইতিমধ্যে-লিখিত কোডের জন্য কাজ চালিয়ে যাবে।
যাইহোক, আপনি বিদ্যমান ব্যবহারগুলিকে নন-লেগেসি TF2 API-এ স্থানান্তরিত করতে বেছে নিতে পারেন। পৃথক compat.v1
চিহ্নগুলির ডকস্ট্রিংগুলি প্রায়শই ব্যাখ্যা করে যে কীভাবে সেগুলিকে নন-লেগেসি TF2 APIগুলিতে স্থানান্তর করা যায়। অতিরিক্তভাবে, ইডিওম্যাটিক TF2 API-তে ক্রমবর্ধমান স্থানান্তরের উপর মডেল ম্যাপিং গাইডের বিভাগটিও এতে সাহায্য করতে পারে।
সম্পদ এবং আরও পড়া
আগেই বলা হয়েছে, আপনার সমস্ত TF1.x কোড TF2-এ স্থানান্তর করা একটি ভাল অভ্যাস। আরও জানতে টেনসরফ্লো গাইডের TF2 বিভাগে মাইগ্রেট করুন।