কেরাস ‘প্রি-ট্রেইনড’ মডেল এবং তার ব্যবহার

(পুরো চ্যাপ্টার একটা নোটবুক)

আমরা বই পড়ছি, নোটবুক কেন পড়বো?

নোটবুক সবসময় আপডেটেড। এই বই থেকেও।

যেহেতু গিটবুকে নোটবুক ঠিকমতো রেন্ডার হয়না, সেকারণে গুগল কোলাব এবং গিটহাবে দেখা উচিৎ। গিটহাব লিংক:

নিজে নিজে প্র্যাকটিস করুন: https://github.com/raqueeb/TensorFlow2/blob/master/tf_keras_pretraind.ipynb

অথবা https://nbviewer.jupyter.org/github/raqueeb/TensorFlow2/blob/master/tf_keras_pretraind.ipynb

কোলাব লিংক: https://colab.research.google.com/github/raqueeb/TensorFlow2/blob/master/tf_keras_pretraind.ipynb

‘প্রি-ট্রেইনড’ মডেল এবং তার ব্যবহার

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

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

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

‘ট্রান্সফার লার্নিং’ কেন?

এই ‘ট্রান্সফার লার্নিং’ (সামনে বলছি) এর জন্য যখন একটা মডেলকে ট্রেইন করা হয়েছিল একটা কাজের জন্য - এখন সেটাকে ব্যবহার করা যাচ্ছে অন্যান্য কাজে। ব্যাপারটা এরকম যে - একটা মডেল, যাকে নির্দিষ্ট একটা কাজের জন্য ট্রেইন করা হলেও সেটাকে নতুন করে অন্য কাজের জন্য তার প্যারামিটারগুলোকে ‘এডজাস্ট’ এবং ‘ফাইন টিউনিং’ করা যাচ্ছে একেবারে গোড়া থেকে নতুন মডেল ট্রেইন না করেও। এই যে একটা মডেলকে ট্রেইন করা হয়েছে একটা কাজের জন্য, সেটাকে এখন ব্যবহার করা যাচ্ছে অনান্য কাজের জন্য সেটাকে আমরা বলতে পারি ‘প্রি-ট্রেইনড’ মডেল।

আমাদের ‘কেরাস’ এ এই ‘প্রি-ট্রেইনড’ মডেলগুলো আছে ‘অ্যাপ্লিকেশন’ হিসেবে। ধরা যাক একটা ‘ইমেজনেট’ ডাটাসেটে যে অ্যাপ্লিকেশন আছে - সে প্রায় ১০০০ ক্যাটাগরি বা ক্লাসে বিভিন্ন ইমেজকে ক্লাসিফাই করতে পারে। এই ‘প্রি-ট্রেইনড’ মডেলগুলো আছে দু'ভাগে, একটা মডেল আর্কিটেকচার হিসেবে, আরেকটা মডেল ওয়েট এ। মডেল আর্কিটেকচারগুলো সাধারণতঃ ডাউনলোড হয়ে থাকে কেরাস ইনস্টলেশনের সময়। এখন কেরাস কিন্তু টেন্সর-ফ্লো এর ইন্টেগ্রাল পার্ট। তবে মডেলের ওয়েটগুলো অনেক বড় বড় সাইজের ফাইল হওয়াতে সেটা ডাউনলোড হয় যখন আমরা একটা মডেলকে ইনস্ট্যান্সিয়েট করি।

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

# যেহেতু কেরাস এখন টেন্সর-ফ্লো এর ইন্টিগ্রাল পার্ট, একে টেন্সর-ফ্লো থেকে নিয়ে আসছি

from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.resnet50 import preprocess_input
import numpy as np
png
png

‘প্রি-ট্রেইনড’ মডেল থেকে ফিচার এক্সট্রাকশন

আরেকটা উদাহরন দেখি, কেরাস এর মূল সাইটে এরকম অনেকগুলো উদাহরণ আছে। যদিও কেরাস এখন টেন্সর-ফ্লো এর সাথে চলে এসেছে, তবে কেরাসের মূল সাইটে অসাধারণ অনেক ডকুমেন্টেশন আছে, যা দরকার হবে সামনে।

সামনের চ্যাপ্টারে আমরা আলাপ করবো ট্রান্সফার লার্নিং নিয়ে।

Last updated

Was this helpful?