ট্রান্সফার লার্নিং সহ আপনার প্রথম কেরাস মডেল

১. সংক্ষিপ্ত বিবরণ

এই ল্যাবে, আপনি একটি কেরাস ক্লাসিফায়ার তৈরি করতে শিখবেন। ফুল শনাক্ত করার জন্য নিউরাল নেটওয়ার্ক লেয়ারগুলোর নিখুঁত সমন্বয় খুঁজে বের করার চেষ্টার পরিবর্তে, আমরা প্রথমে ট্রান্সফার লার্নিং নামক একটি কৌশল ব্যবহার করে একটি শক্তিশালী প্রি-ট্রেইনড মডেলকে আমাদের ডেটাসেটের সাথে খাপ খাইয়ে নেব।

এই ল্যাবটিতে নিউরাল নেটওয়ার্ক সম্পর্কে প্রয়োজনীয় তাত্ত্বিক ব্যাখ্যা রয়েছে এবং এটি ডেভেলপারদের ডিপ লার্নিং শেখার জন্য একটি ভালো সূচনা।

এই ল্যাবটি 'Keras on TPU' সিরিজের দ্বিতীয় পর্ব। আপনি এগুলো নিম্নলিখিত ক্রমানুসারে অথবা আলাদাভাবে করতে পারেন।

ca8cc21f6838eccc.png

আপনি যা শিখবেন

  • সফটম্যাক্স লেয়ার এবং ক্রস-এন্ট্রপি লস ব্যবহার করে আপনার নিজস্ব কেরাস ইমেজ ক্লাসিফায়ার তৈরি করতে
  • প্রতারণা করতে 😈, নিজের মডেল তৈরি করার পরিবর্তে ট্রান্সফার লার্নিং ব্যবহার করা।

প্রতিক্রিয়া

এই কোড ল্যাবে কোনো ভুল দেখলে, অনুগ্রহ করে আমাদের জানান। GitHub ইস্যুর মাধ্যমে মতামত জানানো যাবে [ মতামত লিঙ্ক ]।

২. গুগল কোলাবোরেটরি কুইক স্টার্ট

এই ল্যাবটি গুগল কোলাবোরেটরি ব্যবহার করে এবং এর জন্য আপনার পক্ষ থেকে কোনো সেটআপের প্রয়োজন নেই। কোলাবোরেটরি হলো শিক্ষামূলক উদ্দেশ্যে ব্যবহৃত একটি অনলাইন নোটবুক প্ল্যাটফর্ম। এটি বিনামূল্যে সিপিইউ, জিপিইউ এবং টিপিইউ প্রশিক্ষণের সুযোগ দেয়।

688858c21e3beff2.png

Colaboratory-র সাথে পরিচিত হওয়ার জন্য আপনি এই নমুনা নোটবুকটি খুলে কয়েকটি সেল চালিয়ে দেখতে পারেন।

c3df49e90e5a654f.png Welcome to Colab.ipynb

একটি টিপিইউ ব্যাকএন্ড নির্বাচন করুন

8832c6208c99687d.png

Colab মেনুতে, Runtime > Change runtime type নির্বাচন করুন এবং তারপর TPU নির্বাচন করুন। এই কোড ল্যাবে আপনি হার্ডওয়্যার-ত্বরিত প্রশিক্ষণের জন্য একটি শক্তিশালী TPU (টেনসর প্রসেসিং ইউনিট) ব্যবহার করবেন। প্রথমবার চালানোর সময় রানটাইমের সাথে সংযোগ স্বয়ংক্রিয়ভাবে হয়ে যাবে, অথবা আপনি উপরের-ডান কোণায় থাকা "Connect" বোতামটি ব্যবহার করতে পারেন।

নোটবুক সম্পাদন

76d05caa8b4db6da.png

একটি সেলে ক্লিক করে Shift-ENTER ব্যবহার করে সেলগুলো এক এক করে চালান। এছাড়াও, আপনি Runtime > Run all ব্যবহার করে সম্পূর্ণ নোটবুকটি চালাতে পারেন।

সূচিপত্র

429f106990037ec4.png

সব নোটবুকেই একটি সূচিপত্র থাকে। বামদিকের কালো তীরচিহ্নটি ব্যবহার করে আপনি সেটি খুলতে পারেন।

লুকানো কোষ

edc3dba45d26f12a.png

কিছু সেলে শুধুমাত্র তাদের শিরোনাম দেখা যাবে। এটি কোলাব-এর একটি নোটবুক বৈশিষ্ট্য। ভেতরের কোড দেখার জন্য আপনি এগুলোর উপর ডাবল ক্লিক করতে পারেন, কিন্তু তা সাধারণত খুব একটা আকর্ষণীয় হয় না। এগুলো সাধারণত সাপোর্ট বা ভিজ্যুয়ালাইজেশন ফাংশন। ভেতরের ফাংশনগুলো সংজ্ঞায়িত করার জন্য আপনাকে এই সেলগুলো রান করতে হবে।

প্রমাণীকরণ

cdd4b41413100543.png

একটি অনুমোদিত অ্যাকাউন্ট দিয়ে প্রমাণীকরণ করলে কোলাব আপনার ব্যক্তিগত গুগল ক্লাউড স্টোরেজ বাকেটগুলো অ্যাক্সেস করতে পারবে। উপরের কোড স্নিপেটটি একটি প্রমাণীকরণ প্রক্রিয়া চালু করবে।

৩. [তথ্য] নিউরাল নেটওয়ার্ক ক্লাসিফায়ার ১০১

সংক্ষেপে

পরবর্তী অনুচ্ছেদে বোল্ড করা সমস্ত পরিভাষা যদি আপনার আগে থেকেই জানা থাকে, তাহলে আপনি পরবর্তী অনুশীলনীতে যেতে পারেন। আর আপনি যদি ডিপ লার্নিং সবে শুরু করে থাকেন, তাহলে আপনাকে স্বাগতম, এবং অনুগ্রহ করে পড়তে থাকুন।

ধারাবাহিকভাবে স্তর দিয়ে তৈরি মডেলের জন্য কেরাস সিকোয়েনশিয়াল এপিআই (Sequential API) প্রদান করে। উদাহরণস্বরূপ, তিনটি ডেন্স লেয়ার ব্যবহার করে একটি ইমেজ ক্লাসিফায়ার কেরাসে এভাবে লেখা যেতে পারে:

model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=[192, 192, 3]),
    tf.keras.layers.Dense(500, activation="relu"),
    tf.keras.layers.Dense(50, activation="relu"),
    tf.keras.layers.Dense(5, activation='softmax') # classifying into 5 classes
])

# this configures the training of the model. Keras calls it "compiling" the model.
model.compile(
  optimizer='adam',
  loss= 'categorical_crossentropy',
  metrics=['accuracy']) # % of correct answers

# train the model
model.fit(dataset, ... )

688858c21e3beff2.png

ঘন নিউরাল নেটওয়ার্ক

এটি ছবি শ্রেণীবদ্ধ করার জন্য সবচেয়ে সরল নিউরাল নেটওয়ার্ক। এটি স্তরে স্তরে সাজানো "নিউরন" দিয়ে গঠিত। প্রথম স্তরটি ইনপুট ডেটা প্রক্রিয়াজাত করে এবং এর আউটপুট অন্যান্য স্তরে প্রেরণ করে। একে "ডেনস" বলা হয় কারণ প্রতিটি নিউরন পূর্ববর্তী স্তরের সমস্ত নিউরনের সাথে সংযুক্ত থাকে।

c21bae6dade487bc.png

একটি ছবির সমস্ত পিক্সেলের RGB মানগুলিকে একটি দীর্ঘ ভেক্টরে পরিণত করে সেটিকে ইনপুট হিসাবে ব্যবহার করে এই ধরনের নেটওয়ার্কে ছবিটি পাঠানো যায়। এটি ছবি শনাক্তকরণের জন্য সেরা কৌশল নয়, তবে আমরা পরে এটিকে আরও উন্নত করব।

নিউরন, সক্রিয়করণ, RELU

একটি "নিউরন" তার সমস্ত ইনপুটের একটি ওয়েটেড সাম (ভারযুক্ত যোগফল) গণনা করে, এর সাথে "বায়াস" নামক একটি মান যোগ করে এবং ফলাফলটিকে একটি "অ্যাক্টিভেশন ফাংশন"-এর মধ্য দিয়ে পাঠায়। ওয়েট এবং বায়াস প্রথমে অজানা থাকে। এগুলোকে এলোমেলোভাবে প্রারম্ভিক মান দেওয়া হয় এবং প্রচুর জ্ঞাত ডেটার উপর নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দিয়ে "শেখা" হয়।

644f4213a4ee70e5.png

সবচেয়ে জনপ্রিয় অ্যাক্টিভেশন ফাংশনটিকে RELU বা Rectified Linear Unit বলা হয়। এটি একটি খুব সহজ ফাংশন, যেমনটি আপনি উপরের গ্রাফটিতে দেখতে পাচ্ছেন।

সফটম্যাক্স অ্যাক্টিভেশন

উপরের নেটওয়ার্কটি একটি ৫-নিউরন লেয়ারে শেষ হয়েছে, কারণ আমরা ফুলগুলোকে ৫টি শ্রেণীতে (গোলাপ, টিউলিপ, ড্যান্ডেলিয়ন, ডেইজি, সূর্যমুখী) ভাগ করছি। মধ্যবর্তী লেয়ারগুলোর নিউরনগুলো ক্লাসিক RELU অ্যাক্টিভেশন ফাংশন ব্যবহার করে সক্রিয় করা হয়। তবে, শেষ লেয়ারে আমরা ০ থেকে ১-এর মধ্যে এমন সংখ্যা গণনা করতে চাই, যা এই ফুলটি গোলাপ, টিউলিপ ইত্যাদি হওয়ার সম্ভাবনাকে নির্দেশ করে। এর জন্য আমরা "softmax" নামক একটি অ্যাক্টিভেশন ফাংশন ব্যবহার করব।

একটি ভেক্টরের উপর সফটম্যাক্স প্রয়োগ করা হয় এর প্রতিটি উপাদানের এক্সপোনেনশিয়াল নিয়ে এবং তারপর ভেক্টরটিকে নর্মালাইজ করে, সাধারণত L1 নর্ম (পরম মানগুলোর যোগফল) ব্যবহার করে, যাতে মানগুলোর যোগফল ১ হয় এবং সেগুলোকে সম্ভাবনা হিসেবে ব্যাখ্যা করা যায়।

ef0d98c0952c262d.pngd51252f75894479e.gif

ক্রস-এনট্রপি হ্রাস

এখন যেহেতু আমাদের নিউরাল নেটওয়ার্ক ইনপুট ছবিগুলো থেকে পূর্বাভাস তৈরি করছে, আমাদের পরিমাপ করতে হবে সেগুলো কতটা ভালো, অর্থাৎ নেটওয়ার্ক যা বলছে এবং সঠিক উত্তরের (যাকে প্রায়শই 'লেবেল' বলা হয়) মধ্যেকার পার্থক্য। মনে রাখবেন যে ডেটাসেটের সমস্ত ছবির জন্যই আমাদের কাছে সঠিক লেবেল রয়েছে।

যেকোনো দূরত্বই কাজ করবে, কিন্তু ক্লাসিফিকেশন সমস্যার জন্য তথাকথিত 'ক্রস-এন্ট্রপি দূরত্ব' সবচেয়ে কার্যকর । আমরা একে আমাদের এরর বা 'লস' ফাংশন বলব:

7bdf8753d20617fb.png

গ্রেডিয়েন্ট অবতরণ

নিউরাল নেটওয়ার্ককে "প্রশিক্ষণ" দেওয়ার অর্থ হলো, প্রশিক্ষণ চিত্র এবং লেবেল ব্যবহার করে ওয়েট ও বায়াস এমনভাবে সমন্বয় করা, যাতে ক্রস-এন্ট্রপি লস ফাংশনটি সর্বনিম্ন হয়। এটি যেভাবে কাজ করে তা নিচে দেওয়া হলো।

ক্রস-এন্ট্রপি হলো ট্রেনিং ইমেজের ওয়েট, বায়াস, পিক্সেল এবং এর জ্ঞাত ক্লাসের একটি ফাংশন।

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

গ্রেডিয়েন্ট ডিসেন্ট২.png

মিনি-ব্যাচিং এবং গতি

আপনি শুধুমাত্র একটি উদাহরণ চিত্রের উপর আপনার গ্রেডিয়েন্ট গণনা করতে পারেন এবং অবিলম্বে ওয়েট ও বায়াস আপডেট করতে পারেন, কিন্তু উদাহরণস্বরূপ, ১২৮টি চিত্রের একটি ব্যাচের উপর এটি করলে এমন একটি গ্রেডিয়েন্ট পাওয়া যায় যা বিভিন্ন উদাহরণ চিত্র দ্বারা আরোপিত সীমাবদ্ধতাগুলিকে আরও ভালোভাবে উপস্থাপন করে এবং তাই সমাধানের দিকে দ্রুত অভিসারী হওয়ার সম্ভাবনা থাকে। মিনি-ব্যাচের আকার একটি পরিবর্তনযোগ্য প্যারামিটার।

এই কৌশলটি, যাকে কখনও কখনও 'স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট' বলা হয়, এর আরও একটি বাস্তবসম্মত সুবিধা রয়েছে: ব্যাচ পদ্ধতিতে কাজ করার অর্থ হলো আরও বড় ম্যাট্রিক্স নিয়ে কাজ করা, এবং এগুলো সাধারণত GPU ও TPU-তে অপ্টিমাইজ করা সহজ হয়।

তবে অভিসরণ প্রক্রিয়াটি তখনও কিছুটা বিশৃঙ্খল হতে পারে এবং গ্রেডিয়েন্ট ভেক্টরের সব উপাদান শূন্য হলে এটি থেমেও যেতে পারে। তার মানে কি আমরা একটি সর্বনিম্ন বিন্দু খুঁজে পেয়েছি? সবসময় না। একটি গ্রেডিয়েন্ট উপাংশ সর্বনিম্ন বা সর্বোচ্চ বিন্দুতেও শূন্য হতে পারে। লক্ষ লক্ষ উপাদানবিশিষ্ট একটি গ্রেডিয়েন্ট ভেক্টরের ক্ষেত্রে, যদি সবগুলোই শূন্য হয়, তবে প্রতিটি শূন্যই একটি সর্বনিম্ন বিন্দুর সাথে এবং কোনোটিই সর্বোচ্চ বিন্দুর সাথে সম্পর্কিত না হওয়ার সম্ভাবনা খুবই কম। বহু-মাত্রিক পরিসরে স্যাডল পয়েন্ট বেশ সাধারণ এবং আমরা সেখানে থেমে যেতে চাই না।

52e824fe4716c4a0.png

উদাহরণ: একটি স্যাডল পয়েন্ট। এর গ্রেডিয়েন্ট ০, কিন্তু এটি সব দিকেই সর্বনিম্ন নয়। (ছবির স্বত্ব উইকিমিডিয়া: নিকোগুয়ারোর নিজস্ব কাজ, সিসি বাই ৩.০ )

এর সমাধান হলো অপ্টিমাইজেশন অ্যালগরিদমে কিছুটা গতি যোগ করা, যাতে এটি না থেমে স্যাডল পয়েন্টগুলো অতিক্রম করতে পারে।

শব্দকোষ

ব্যাচ বা মিনি-ব্যাচ : প্রশিক্ষণ সর্বদা প্রশিক্ষণ ডেটা এবং লেবেলের ব্যাচের উপর সঞ্চালিত হয়। এটি অ্যালগরিদমকে অভিসৃত হতে সাহায্য করে। "ব্যাচ" ডাইমেনশনটি সাধারণত ডেটা টেনসরের প্রথম ডাইমেনশন হয়। উদাহরণস্বরূপ, [100, 192, 192, 3] আকারের একটি টেনসরে 192x192 পিক্সেলের 100টি ছবি থাকে, যেখানে প্রতি পিক্সেলে তিনটি মান (RGB) থাকে।

ক্রস-এন্ট্রপি লস : একটি বিশেষ লস ফাংশন যা প্রায়শই ক্লাসিফায়ারে ব্যবহৃত হয়।

ঘন স্তর : নিউরনের এমন একটি স্তর যেখানে প্রতিটি নিউরন পূর্ববর্তী স্তরের সমস্ত নিউরনের সাথে সংযুক্ত থাকে।

ফিচার : একটি নিউরাল নেটওয়ার্কের ইনপুটগুলোকে কখনও কখনও "ফিচার" বলা হয়। একটি ডেটাসেটের কোন অংশগুলো (বা অংশগুলোর সংমিশ্রণ) একটি নিউরাল নেটওয়ার্কে ইনপুট হিসেবে দিলে ভালো প্রেডিকশন পাওয়া যাবে, তা বের করার কৌশলকে "ফিচার ইঞ্জিনিয়ারিং" বলা হয়।

লেবেল : সুপারভাইজড ক্লাসিফিকেশন সমস্যায় 'ক্লাস' বা সঠিক উত্তরের অপর নাম।

লার্নিং রেট : গ্রেডিয়েন্টের সেই ভগ্নাংশ, যার দ্বারা ট্রেনিং লুপের প্রতিটি ইটারেশনে ওয়েট এবং বায়াস আপডেট করা হয়।

লজিটস : অ্যাক্টিভেশন ফাংশন প্রয়োগ করার আগে নিউরনের একটি স্তরের আউটপুটকে "লজিটস" বলা হয়। এই পরিভাষাটি "লজিস্টিক ফাংশন" বা "সিগময়েড ফাংশন" থেকে এসেছে, যা একসময় সবচেয়ে জনপ্রিয় অ্যাক্টিভেশন ফাংশন ছিল। "লজিস্টিক ফাংশনের আগে নিউরনের আউটপুট" কথাটিকে সংক্ষেপে "লজিটস" বলা হতো।

লস (loss) : নিউরাল নেটওয়ার্কের আউটপুটগুলোকে সঠিক উত্তরের সাথে তুলনা করার জন্য ব্যবহৃত এরর ফাংশন।

নিউরন : এর ইনপুটগুলোর ভারযুক্ত যোগফল গণনা করে, একটি বায়াস যোগ করে এবং ফলাফলটিকে একটি অ্যাক্টিভেশন ফাংশনের মাধ্যমে প্রেরণ করে।

ওয়ান-হট এনকোডিং : ৫টির মধ্যে ৩ নম্বর ক্লাসকে ৫টি উপাদানের একটি ভেক্টর হিসেবে এনকোড করা হয়, যেখানে ৩য় উপাদানটি (১) ছাড়া বাকি সব উপাদান শূন্য থাকে।

relu : রেক্টিফাইড লিনিয়ার ইউনিট। নিউরনের জন্য একটি জনপ্রিয় অ্যাক্টিভেশন ফাংশন।

সিগময়েড : আরেকটি অ্যাক্টিভেশন ফাংশন যা একসময় জনপ্রিয় ছিল এবং বিশেষ ক্ষেত্রে এখনও কাজে লাগে।

সফটম্যাক্স : একটি বিশেষ অ্যাক্টিভেশন ফাংশন যা একটি ভেক্টরের উপর কাজ করে, এর বৃহত্তম উপাদান এবং অন্য সব উপাদানের মধ্যে পার্থক্য বাড়িয়ে দেয় এবং ভেক্টরটিকে এমনভাবে স্বাভাবিক করে যাতে এর যোগফল ১ হয়, ফলে এটিকে সম্ভাবনার ভেক্টর হিসেবে ব্যাখ্যা করা যায়। ক্লাসিফায়ারের শেষ ধাপ হিসেবে এটি ব্যবহৃত হয়।

টেনসর : একটি "টেনসর" হলো ম্যাট্রিক্সের মতো, কিন্তু এর মাত্রা সংখ্যা ইচ্ছামত হতে পারে। ১-মাত্রার টেনসর হলো একটি ভেক্টর। ২-মাত্রার টেনসর হলো একটি ম্যাট্রিক্স। এছাড়াও ৩, ৪, ৫ বা তার বেশি মাত্রার টেনসরও থাকতে পারে।

৪. স্থানান্তর শিক্ষা

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

কিন্তু আমরা একটি শর্টকাটও নিতে পারি! ডাউনলোডের জন্য সম্পূর্ণ প্রশিক্ষিত কনভল্যুশনাল নিউরাল নেটওয়ার্ক পাওয়া যায়। এগুলোর শেষ লেয়ার, অর্থাৎ সফটম্যাক্স ক্লাসিফিকেশন হেডটি কেটে ফেলে তার জায়গায় আপনার নিজের লেয়ারটি বসানো সম্ভব। সমস্ত প্রশিক্ষিত ওয়েট এবং বায়াস অপরিবর্তিত থাকে, আপনাকে শুধু নতুন যোগ করা সফটম্যাক্স লেয়ারটিকেই পুনরায় প্রশিক্ষণ দিতে হয়। এই কৌশলটিকে ট্রান্সফার লার্নিং বলা হয় এবং আশ্চর্যজনকভাবে, এটি ততক্ষণ কাজ করে যতক্ষণ পর্যন্ত নিউরাল নেটটি যে ডেটাসেটের উপর প্রি-ট্রেইন করা হয়েছে, তা আপনার ডেটাসেটের "যথেষ্ট কাছাকাছি" থাকে।

হাতে-কলমে

অনুগ্রহ করে নিম্নলিখিত নোটবুকটি খুলুন, সেলগুলো এক্সিকিউট করুন (Shift-ENTER) এবং যেখানেই "WORK REQUIRED" লেবেল দেখবেন, সেখানকার নির্দেশাবলী অনুসরণ করুন।

c3df49e90e5a654f.png Keras Flowers transfer learning (playground).ipynb

অতিরিক্ত তথ্য

ট্রান্সফার লার্নিং-এর মাধ্যমে আপনি শীর্ষ গবেষকদের দ্বারা তৈরি উন্নত কনভল্যুশনাল নিউরাল নেটওয়ার্ক আর্কিটেকচার এবং ছবির একটি বিশাল ডেটাসেটে প্রি-ট্রেনিং—উভয় সুবিধাই লাভ করেন। আমাদের ক্ষেত্রে, আমরা ইমেজনেট (ImageNet) নামক একটি ডেটাবেসের উপর প্রশিক্ষিত নেটওয়ার্ক থেকে ট্রান্সফার লার্নিং করব। এই ডেটাবেসে প্রচুর গাছপালা এবং বাইরের দৃশ্যের ছবি রয়েছে, যা ফুলের ছবির বেশ কাছাকাছি।

b8fc1efd2001f072.png

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

কেরাসে লার্নিং স্থানান্তর করুন

কেরাসে, আপনি tf.keras.applications.* কালেকশন থেকে একটি প্রি-ট্রেইনড মডেল ইনস্ট্যানশিয়েট করতে পারেন। উদাহরণস্বরূপ, MobileNet V2 একটি খুব ভালো কনভোলিউশনাল আর্কিটেকচার যা আকারে যুক্তিসঙ্গত থাকে। include_top=False নির্বাচন করার মাধ্যমে, আপনি প্রি-ট্রেইনড মডেলটি তার শেষ সফটম্যাক্স লেয়ার ছাড়া পাবেন, যাতে আপনি নিজের সফটম্যাক্স লেয়ার যোগ করতে পারেন।

pretrained_model = tf.keras.applications.MobileNetV2(input_shape=[*IMAGE_SIZE, 3], include_top=False)
pretrained_model.trainable = False

model = tf.keras.Sequential([
    pretrained_model,
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(5, activation='softmax')
])

এছাড়াও pretrained_model.trainable = False সেটিংটি লক্ষ্য করুন। এটি প্রি-ট্রেইনড মডেলের ওয়েট এবং বায়াস স্থির করে দেয়, যাতে আপনি শুধুমাত্র আপনার সফটম্যাক্স লেয়ারকে ট্রেইন করতে পারেন। এতে সাধারণত তুলনামূলকভাবে কম ওয়েট ব্যবহৃত হয় এবং এটি দ্রুত করা যায়, যার জন্য খুব বড় ডেটাসেটের প্রয়োজন হয় না। তবে, যদি আপনার কাছে প্রচুর ডেটা থাকে, তাহলে pretrained_model.trainable = True ব্যবহার করে ট্রান্সফার লার্নিং আরও ভালোভাবে কাজ করতে পারে। সেক্ষেত্রে প্রি-ট্রেইনড ওয়েটগুলো চমৎকার প্রাথমিক মান প্রদান করে এবং আপনার সমস্যার সাথে আরও ভালোভাবে খাপ খাইয়ে নেওয়ার জন্য ট্রেনিংয়ের মাধ্যমে সেগুলোকে অ্যাডজাস্টও করা যায়।

অবশেষে, আপনার ডেন্স সফটম্যাক্স লেয়ারের আগে সন্নিবেশিত Flatten() লেয়ারটি লক্ষ্য করুন। ডেন্স লেয়ারগুলো ডেটার ফ্ল্যাট ভেক্টরের উপর কাজ করে, কিন্তু প্রিট্রেইনড মডেলটি ঠিক কী রিটার্ন করে তা আমরা জানি না। একারণেই আমাদের ফ্ল্যাটেন করার প্রয়োজন হয়। পরবর্তী অধ্যায়ে, আমরা যখন কনভোলিউশনাল আর্কিটেকচার নিয়ে বিস্তারিত আলোচনা করব, তখন কনভোলিউশনাল লেয়ারগুলো দ্বারা রিটার্ন করা ডেটা ফরম্যাট ব্যাখ্যা করব।

এই পদ্ধতিতে আপনি প্রায় ৭৫% নির্ভুলতা অর্জন করতে পারবেন।

সমাধান

এই হলো সমাধান নোটবুক। কোথাও আটকে গেলে এটি ব্যবহার করতে পারেন।

c3df49e90e5a654f.png Keras Flowers transfer learning (solution).ipynb

আমরা যা আলোচনা করেছি

  • 🤔 কেরাসে কীভাবে ক্লাসিফায়ার লিখতে হয়
  • 🤓 শেষ লেয়ারে সফটম্যাক্স এবং ক্রস-এন্ট্রপি লস দিয়ে কনফিগার করা হয়েছে
  • 😈 স্থানান্তর শিক্ষা
  • 🤔 আপনার প্রথম মডেলকে প্রশিক্ষণ দেওয়া
  • 🧐 প্রশিক্ষণের সময় এর ক্ষতি এবং নির্ভুলতা

অনুগ্রহ করে এক মুহূর্ত সময় নিয়ে মনে মনে এই চেকলিস্টটি একবার দেখে নিন।

৫. অভিনন্দন!

আপনি এখন একটি কেরাস মডেল তৈরি করতে পারেন। কনভোলিউশনাল লেয়ারগুলো কীভাবে সাজাতে হয় তা শিখতে অনুগ্রহ করে পরবর্তী ল্যাবে যান।

বাস্তবে টিপিইউ

ক্লাউড এআই প্ল্যাটফর্মে টিপিইউ এবং জিপিইউ উপলব্ধ আছে:

সবশেষে, আমরা মতামতকে স্বাগত জানাই। এই ল্যাবে কোনো ভুল দেখলে বা এর উন্নতি প্রয়োজন বলে মনে করলে, অনুগ্রহ করে আমাদের জানান। GitHub ইস্যুর মাধ্যমে মতামত দেওয়া যাবে [ মতামত লিঙ্ক ]।

এইচআর.পিএনজি

মার্টিন গোর্নার আইডি ছোট.jpg
লেখক: মার্টিন গোর্নার
টুইটার: @martin_gorner

tensorflow logo.jpg
www.tensorflow.org