1. ওভারভিউ
এই ল্যাবে, আপনি শিখবেন কিভাবে কেরাস ক্লাসিফায়ার তৈরি করতে হয়। ফুল চিনতে নিউরাল নেটওয়ার্ক স্তরগুলির নিখুঁত সংমিশ্রণ খুঁজে বের করার চেষ্টা করার পরিবর্তে, আমরা প্রথমে আমাদের ডেটাসেটে একটি শক্তিশালী প্রাক-প্রশিক্ষিত মডেলকে মানিয়ে নিতে ট্রান্সফার লার্নিং নামে একটি কৌশল ব্যবহার করব।
এই ল্যাবটিতে নিউরাল নেটওয়ার্ক সম্পর্কে প্রয়োজনীয় তাত্ত্বিক ব্যাখ্যা রয়েছে এবং এটি গভীর শিক্ষা সম্পর্কে শেখার বিকাশকারীদের জন্য একটি ভাল সূচনা পয়েন্ট।
এই ল্যাবটি "Keras on TPU" সিরিজের পার্ট 2। আপনি সেগুলি নিম্নলিখিত ক্রমে বা স্বাধীনভাবে করতে পারেন।
- TPU-গতির ডেটা পাইপলাইন: tf.data.Dataset এবং TFRecords
- [এই ল্যাব] আপনার প্রথম কেরাস মডেল, ট্রান্সফার লার্নিং সহ
- কেরাস এবং টিপিইউ সহ কনভোল্যুশনাল নিউরাল নেটওয়ার্ক
- কেরাস এবং টিপিইউ সহ আধুনিক কনভনেট, স্কুইজেনেট, এক্সসেপশন
আপনি কি শিখবেন
- সফটম্যাক্স লেয়ার এবং ক্রস-এনট্রপি লস সহ আপনার নিজস্ব কেরাস ইমেজ ক্লাসিফায়ার তৈরি করতে
- প্রতারণা করতে 😈, আপনার নিজের মডেল তৈরি করার পরিবর্তে ট্রান্সফার লার্নিং ব্যবহার করুন।
প্রতিক্রিয়া
আপনি যদি এই কোড ল্যাবে কিছু ভুল দেখতে পান, দয়া করে আমাদের বলুন। গিটহাব সমস্যার মাধ্যমে প্রতিক্রিয়া প্রদান করা যেতে পারে [ প্রতিক্রিয়া লিঙ্ক ]।
2. Google Colaboratory দ্রুত শুরু
এই ল্যাবটি Google Collaboratory ব্যবহার করে এবং আপনার পক্ষ থেকে কোন সেটআপের প্রয়োজন নেই৷ Colaboratory হল শিক্ষার উদ্দেশ্যে একটি অনলাইন নোটবুক প্ল্যাটফর্ম। এটি বিনামূল্যে CPU, GPU এবং TPU প্রশিক্ষণ প্রদান করে।
আপনি এই নমুনা নোটবুকটি খুলতে পারেন এবং Colaboratory এর সাথে নিজেকে পরিচিত করতে কয়েকটি কক্ষের মাধ্যমে চালাতে পারেন।
একটি TPU ব্যাকএন্ড নির্বাচন করুন
Colab মেনুতে, রানটাইম > রানটাইম পরিবর্তন করুন এবং তারপরে TPU নির্বাচন করুন। এই কোড ল্যাবে আপনি একটি শক্তিশালী TPU (টেনসর প্রসেসিং ইউনিট) ব্যবহার করবেন যা হার্ডওয়্যার-ত্বরিত প্রশিক্ষণের জন্য সমর্থিত। রানটাইমের সাথে সংযোগটি প্রথম সম্পাদনে স্বয়ংক্রিয়ভাবে ঘটবে, অথবা আপনি উপরের-ডান কোণে "সংযোগ" বোতামটি ব্যবহার করতে পারেন।
নোটবুক এক্সিকিউশন
একটি কক্ষে ক্লিক করে এবং Shift-ENTER ব্যবহার করে এক সময়ে সেলগুলি চালান৷ আপনি রানটাইম > সমস্ত চালান দিয়ে পুরো নোটবুক চালাতে পারেন
বিষয়বস্তুর সারণী
সমস্ত নোটবুকের বিষয়বস্তুর একটি টেবিল আছে। আপনি বাম দিকে কালো তীর ব্যবহার করে এটি খুলতে পারেন।
লুকানো কোষ
কিছু ঘর শুধুমাত্র তাদের শিরোনাম দেখাবে। এটি একটি Colab-নির্দিষ্ট নোটবুক বৈশিষ্ট্য। ভিতরে কোড দেখতে আপনি তাদের উপর ডাবল ক্লিক করতে পারেন কিন্তু এটি সাধারণত খুব আকর্ষণীয় হয় না। সাধারণত সমর্থন বা ভিজ্যুয়ালাইজেশন ফাংশন. ভিতরে ফাংশন সংজ্ঞায়িত করার জন্য আপনাকে এখনও এই ঘরগুলি চালাতে হবে।
প্রমাণীকরণ
Colab-এর পক্ষে আপনার ব্যক্তিগত Google ক্লাউড স্টোরেজ বালতি অ্যাক্সেস করা সম্ভব যদি আপনি একটি অনুমোদিত অ্যাকাউন্টের মাধ্যমে প্রমাণীকরণ করেন। উপরের কোড স্নিপেট একটি প্রমাণীকরণ প্রক্রিয়া ট্রিগার করবে।
3. [তথ্য] নিউরাল নেটওয়ার্ক ক্লাসিফায়ার 101
সংক্ষেপে
যদি পরবর্তী অনুচ্ছেদে গাঢ় সব পদ আপনার কাছে ইতিমধ্যেই পরিচিত হয়, তাহলে আপনি পরবর্তী অনুশীলনে যেতে পারেন। আপনি যদি সবেমাত্র গভীর শিক্ষা শুরু করেন তাহলে স্বাগতম, এবং অনুগ্রহ করে পড়ুন।
স্তরগুলির একটি ক্রম হিসাবে নির্মিত মডেলগুলির জন্য কেরাস অনুক্রমিক 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, ... )
ঘন নিউরাল নেটওয়ার্ক
ইমেজ শ্রেণীবদ্ধ করার জন্য এটি সবচেয়ে সহজ নিউরাল নেটওয়ার্ক। এটি স্তরে স্তরে সাজানো "নিউরন" দিয়ে তৈরি। প্রথম স্তর ইনপুট ডেটা প্রক্রিয়া করে এবং এর আউটপুটগুলিকে অন্যান্য স্তরগুলিতে ফিড করে। একে "ঘন" বলা হয় কারণ প্রতিটি নিউরন পূর্ববর্তী স্তরের সমস্ত নিউরনের সাথে সংযুক্ত থাকে।
আপনি একটি ছবিকে এই জাতীয় নেটওয়ার্কে ফিড করতে পারেন এর সমস্ত পিক্সেলের RGB মানগুলিকে একটি লম্বা ভেক্টরে সমতল করে এবং এটিকে ইনপুট হিসাবে ব্যবহার করে৷ এটি ইমেজ শনাক্তকরণের জন্য সর্বোত্তম কৌশল নয় তবে আমরা পরে এটিতে উন্নতি করব।
নিউরন, অ্যাক্টিভেশন, RELU
একটি "নিউরন" তার সমস্ত ইনপুটগুলির একটি ওজনযুক্ত যোগফল গণনা করে, "বায়াস" নামক একটি মান যোগ করে এবং তথাকথিত "অ্যাক্টিভেশন ফাংশন" এর মাধ্যমে ফলাফলকে ফিড করে। ওজন এবং পক্ষপাত প্রথমে অজানা। এগুলি এলোমেলোভাবে শুরু করা হবে এবং প্রচুর পরিচিত ডেটাতে নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দিয়ে "শিখা" হবে৷
সবচেয়ে জনপ্রিয় অ্যাক্টিভেশন ফাংশনটিকে রেক্টিফায়েড লিনিয়ার ইউনিটের জন্য RELU বলা হয়। এটি একটি খুব সাধারণ ফাংশন যা আপনি উপরের গ্রাফে দেখতে পাচ্ছেন।
সফটম্যাক্স অ্যাক্টিভেশন
উপরের নেটওয়ার্কটি একটি 5-নিউরন স্তর দিয়ে শেষ হয় কারণ আমরা ফুলকে 5টি বিভাগে শ্রেণীবদ্ধ করছি (গোলাপ, টিউলিপ, ড্যান্ডেলিয়ন, ডেইজি, সূর্যমুখী)। মধ্যবর্তী স্তরের নিউরনগুলি ক্লাসিক RELU অ্যাক্টিভেশন ফাংশন ব্যবহার করে সক্রিয় করা হয়। যদিও শেষ স্তরে, আমরা 0 এবং 1 এর মধ্যে সংখ্যা গণনা করতে চাই যা এই ফুলটি গোলাপ, একটি টিউলিপ ইত্যাদি হওয়ার সম্ভাবনার প্রতিনিধিত্ব করে। এর জন্য, আমরা "softmax" নামে একটি অ্যাক্টিভেশন ফাংশন ব্যবহার করব।
একটি ভেক্টরে সফটম্যাক্স প্রয়োগ করা হয় প্রতিটি উপাদানের সূচক নিয়ে এবং তারপর ভেক্টরটিকে স্বাভাবিক করার মাধ্যমে, সাধারণত L1 আদর্শ (পরম মানের সমষ্টি) ব্যবহার করে যাতে মানগুলি 1 পর্যন্ত যোগ হয় এবং সম্ভাব্যতা হিসাবে ব্যাখ্যা করা যায়।
ক্রস-এনট্রপি ক্ষতি
এখন যেহেতু আমাদের নিউরাল নেটওয়ার্ক ইনপুট ইমেজগুলি থেকে ভবিষ্যদ্বাণী তৈরি করে, আমাদের সেগুলি কতটা ভাল তা পরিমাপ করতে হবে, অর্থাৎ নেটওয়ার্ক আমাদের যা বলে এবং সঠিক উত্তরগুলির মধ্যে দূরত্ব, প্রায়ই "লেবেল" বলা হয়। মনে রাখবেন যে ডেটাসেটের সমস্ত ছবির জন্য আমাদের কাছে সঠিক লেবেল রয়েছে।
যেকোনো দূরত্ব কাজ করবে, কিন্তু শ্রেণীবিভাগের সমস্যার জন্য তথাকথিত "ক্রস-এনট্রপি দূরত্ব" সবচেয়ে কার্যকর । আমরা এটিকে আমাদের ত্রুটি বা "ক্ষতি" ফাংশন বলব:
গ্রেডিয়েন্ট ডিসেন্ট
নিউরাল নেটওয়ার্কের "প্রশিক্ষণ" আসলে বোঝায় ওজন এবং পক্ষপাতগুলি সামঞ্জস্য করার জন্য প্রশিক্ষণের চিত্র এবং লেবেল ব্যবহার করা যাতে ক্রস-এনট্রপি লস ফাংশন কম করা যায়। এটি কিভাবে কাজ করে তা এখানে।
ক্রস-এনট্রপি হল ওজন, পক্ষপাত, প্রশিক্ষণ চিত্রের পিক্সেল এবং এর পরিচিত শ্রেণির একটি ফাংশন।
যদি আমরা ক্রস-এনট্রপির আংশিক ডেরিভেটিভগুলিকে তুলনা করি সমস্ত ওজন এবং সমস্ত পক্ষপাতের সাথে তুলনা করে আমরা একটি "গ্রেডিয়েন্ট" পাই, একটি প্রদত্ত চিত্র, লেবেল এবং ওজন এবং পক্ষপাতের বর্তমান মানের জন্য গণনা করা হয়। মনে রাখবেন যে আমাদের লক্ষ লক্ষ ওজন এবং পক্ষপাত থাকতে পারে তাই গ্রেডিয়েন্ট কম্পিউট করা অনেক কাজের মত মনে হয়। ভাগ্যক্রমে, টেনসরফ্লো আমাদের জন্য এটি করে। একটি গ্রেডিয়েন্টের গাণিতিক বৈশিষ্ট্য হল এটি "উপর" নির্দেশ করে। যেহেতু আমরা যেতে চাই যেখানে ক্রস-এনট্রপি কম, আমরা বিপরীত দিকে যাই। আমরা গ্রেডিয়েন্টের একটি ভগ্নাংশ দ্বারা ওজন এবং পক্ষপাত আপডেট করি। তারপরে আমরা ট্রেনিং লুপে পরবর্তী ব্যাচের ট্রেনিং ইমেজ এবং লেবেল ব্যবহার করে একই জিনিস বার বার করি। আশা করি, এটি এমন একটি জায়গায় রূপান্তরিত হয় যেখানে ক্রস-এনট্রপি ন্যূনতম যদিও কিছুই গ্যারান্টি দেয় না যে এই ন্যূনতমটি অনন্য।
মিনি-ব্যাচিং এবং ভরবেগ
আপনি শুধুমাত্র একটি উদাহরণ চিত্রের উপর আপনার গ্রেডিয়েন্ট গণনা করতে পারেন এবং ওজন এবং পক্ষপাতগুলি অবিলম্বে আপডেট করতে পারেন, কিন্তু এটি একটি ব্যাচে, উদাহরণস্বরূপ, 128টি চিত্র একটি গ্রেডিয়েন্ট দেয় যা বিভিন্ন উদাহরণ চিত্র দ্বারা আরোপিত সীমাবদ্ধতাগুলিকে আরও ভালভাবে উপস্থাপন করে এবং তাই একত্রিত হওয়ার সম্ভাবনা রয়েছে দ্রুত সমাধানের দিকে। মিনি-ব্যাচের আকার একটি সামঞ্জস্যযোগ্য পরামিতি।
এই কৌশলটি, যাকে কখনও কখনও "স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট" বলা হয়, এর আরও একটি, আরও বাস্তবসম্মত সুবিধা রয়েছে: ব্যাচগুলির সাথে কাজ করার অর্থ আরও বড় ম্যাট্রিক্সের সাথে কাজ করা এবং এগুলি সাধারণত GPU এবং TPU-তে অপ্টিমাইজ করা সহজ।
কনভারজেন্স এখনও একটু বিশৃঙ্খল হতে পারে এবং গ্রেডিয়েন্ট ভেক্টর সব শূন্য হলে এটি থামতে পারে। যে আমরা একটি ন্যূনতম পাওয়া গেছে যে মানে? সবসময় নয়। একটি গ্রেডিয়েন্ট উপাদান সর্বনিম্ন বা সর্বোচ্চ শূন্য হতে পারে। লক্ষ লক্ষ উপাদান সহ একটি গ্রেডিয়েন্ট ভেক্টরের সাথে, যদি সেগুলি সব শূন্য হয়, সম্ভাব্যতা যে প্রতিটি শূন্য একটি ন্যূনতম এবং কোনটি সর্বাধিক বিন্দুর সাথে সামঞ্জস্যপূর্ণ নয়। অনেক মাত্রার জায়গায়, স্যাডল পয়েন্টগুলি বেশ সাধারণ এবং আমরা সেগুলিতে থামতে চাই না।
উদাহরণ: একটি স্যাডল পয়েন্ট। গ্রেডিয়েন্ট 0 কিন্তু এটি সব দিক থেকে ন্যূনতম নয়। (ইমেজ অ্যাট্রিবিউশন উইকিমিডিয়া: নিকোগুয়ারো দ্বারা - নিজের কাজ, CC BY 3.0 )
সমাধান হল অপ্টিমাইজেশান অ্যালগরিদমে কিছু গতিবেগ যোগ করা যাতে এটি থেমে না গিয়ে অতীতের স্যাডল পয়েন্টে যেতে পারে।
শব্দকোষ
ব্যাচ বা মিনি-ব্যাচ : প্রশিক্ষণ সর্বদা প্রশিক্ষণ ডেটা এবং লেবেলের ব্যাচে সঞ্চালিত হয়। এটি করা অ্যালগরিদমকে একত্রিত করতে সহায়তা করে। "ব্যাচ" মাত্রা সাধারণত ডেটা টেনসরের প্রথম মাত্রা। উদাহরণস্বরূপ আকৃতির একটি টেনসর [100, 192, 192, 3] প্রতি পিক্সেল (RGB) তিনটি মান সহ 192x192 পিক্সেলের 100টি চিত্র রয়েছে।
ক্রস-এনট্রপি লস : একটি বিশেষ ক্ষতি ফাংশন যা প্রায়ই ক্লাসিফায়ারে ব্যবহৃত হয়।
ঘন স্তর : নিউরনের একটি স্তর যেখানে প্রতিটি নিউরন পূর্ববর্তী স্তরের সমস্ত নিউরনের সাথে সংযুক্ত থাকে।
বৈশিষ্ট্য : একটি নিউরাল নেটওয়ার্কের ইনপুট কখনও কখনও "বৈশিষ্ট্য" বলা হয়। ভাল ভবিষ্যদ্বাণী পেতে একটি ডেটাসেটের কোন অংশগুলি (বা অংশগুলির সংমিশ্রণ) একটি নিউরাল নেটওয়ার্কে ফিড করতে হবে তা খুঁজে বের করার শিল্পকে "ফিচার ইঞ্জিনিয়ারিং" বলা হয়।
লেবেল : তত্ত্বাবধানে শ্রেণীবিভাগের সমস্যায় "ক্লাস" বা সঠিক উত্তরের অন্য নাম
শেখার হার : গ্রেডিয়েন্টের ভগ্নাংশ যার দ্বারা প্রশিক্ষণ লুপের প্রতিটি পুনরাবৃত্তিতে ওজন এবং পক্ষপাতগুলি আপডেট করা হয়।
logits : অ্যাক্টিভেশন ফাংশন প্রয়োগ করার আগে নিউরনের একটি স্তরের আউটপুটকে "লগিট" বলা হয়। শব্দটি "লজিস্টিক ফাংশন" ওরফে "সিগময়েড ফাংশন" থেকে এসেছে যা সবচেয়ে জনপ্রিয় অ্যাক্টিভেশন ফাংশন হিসাবে ব্যবহৃত হত। "লজিস্টিক ফাংশনের আগে নিউরন আউটপুট" কে সংক্ষিপ্ত করে "লজিট" করা হয়েছিল।
ক্ষতি : সঠিক উত্তরের সাথে নিউরাল নেটওয়ার্ক আউটপুট তুলনা করার ত্রুটি ফাংশন
নিউরন : এর ইনপুটগুলির ওজনযুক্ত যোগফল গণনা করে, একটি পক্ষপাত যোগ করে এবং একটি সক্রিয়করণ ফাংশনের মাধ্যমে ফলাফলকে ফিড করে।
ওয়ান-হট এনকোডিং : 5 এর মধ্যে 3 ক্লাস 5টি উপাদানের ভেক্টর হিসাবে এনকোড করা হয়েছে, 3য়টি ব্যতীত সমস্ত শূন্য যা 1।
relu : সংশোধনকৃত লিনিয়ার ইউনিট। নিউরনের জন্য একটি জনপ্রিয় অ্যাক্টিভেশন ফাংশন।
সিগমায়েড : আরেকটি অ্যাক্টিভেশন ফাংশন যা জনপ্রিয় ছিল এবং এখনও বিশেষ ক্ষেত্রে কার্যকর।
সফটম্যাক্স : একটি বিশেষ অ্যাক্টিভেশন ফাংশন যা একটি ভেক্টরের উপর কাজ করে, বৃহত্তম উপাদান এবং অন্য সকলের মধ্যে পার্থক্য বাড়ায় এবং ভেক্টরটিকে 1 এর সমষ্টিতে স্বাভাবিক করে তোলে যাতে এটি সম্ভাব্যতার ভেক্টর হিসাবে ব্যাখ্যা করা যায়। ক্লাসিফায়ারে শেষ ধাপ হিসেবে ব্যবহৃত হয়।
tensor : একটি "টেনসর" একটি ম্যাট্রিক্সের মত কিন্তু মাত্রার একটি ইচ্ছামত সংখ্যা সহ। একটি 1-মাত্রিক টেনসর একটি ভেক্টর। একটি 2-মাত্রা টেনসর একটি ম্যাট্রিক্স। এবং তারপরে আপনার 3, 4, 5 বা তার বেশি মাত্রা সহ টেনসর থাকতে পারে।
4. ট্রান্সফার লার্নিং
একটি চিত্র শ্রেণীবিভাগের সমস্যার জন্য, ঘন স্তর সম্ভবত যথেষ্ট হবে না। কনভোল্যুশনাল লেয়ার এবং আপনি সেগুলি কীভাবে সাজাতে পারেন সে সম্পর্কে আমাদের শিখতে হবে।
কিন্তু আমরা একটা শর্টকাটও নিতে পারি! ডাউনলোডের জন্য উপলব্ধ সম্পূর্ণ প্রশিক্ষিত কনভোলিউশনাল নিউরাল নেটওয়ার্ক রয়েছে। তাদের শেষ স্তর, সফটম্যাক্স শ্রেণীবিভাগের মাথাটি কেটে ফেলা এবং এটিকে আপনার নিজের সাথে প্রতিস্থাপন করা সম্ভব। সমস্ত প্রশিক্ষিত ওজন এবং পক্ষপাতগুলি যেমন আছে তেমনই থাকে, আপনি শুধুমাত্র আপনার যোগ করা সফ্টম্যাক্স স্তরটিকে পুনরায় প্রশিক্ষণ দেবেন। এই কৌশলটিকে ট্রান্সফার লার্নিং বলা হয় এবং আশ্চর্যজনকভাবে, এটি ততক্ষণ কাজ করে যতক্ষণ না ডেটাসেটের উপর নিউরাল নেট প্রাক-প্রশিক্ষিত হয় আপনার "যথেষ্ট কাছাকাছি"।
হাতে-কলমে
অনুগ্রহ করে নিচের নোটবুকটি খুলুন, সেলগুলি চালান (Shift-ENTER) এবং নির্দেশাবলী অনুসরণ করুন যেখানেই আপনি একটি "ওয়ার্ক রিকোয়ারড" লেবেল দেখতে পান৷
Keras Flowers transfer learning (playground).ipynb
অতিরিক্ত তথ্য
স্থানান্তর শেখার সাথে, আপনি শীর্ষ গবেষকদের দ্বারা উন্নত উন্নত কনভোলিউশনাল নিউরাল নেটওয়ার্ক আর্কিটেকচার এবং চিত্রের বিশাল ডেটাসেটের প্রাক-প্রশিক্ষণ থেকে উপকৃত হন। আমাদের ক্ষেত্রে আমরা ইমেজনেট-এ প্রশিক্ষিত একটি নেটওয়ার্ক থেকে শেখার স্থানান্তর করব, অনেক গাছপালা এবং বাইরের দৃশ্য সম্বলিত চিত্রগুলির একটি ডাটাবেস, যা ফুলের যথেষ্ট কাছাকাছি।
দৃষ্টান্ত: একটি জটিল কনভোল্যুশনাল নিউরাল নেটওয়ার্ক ব্যবহার করে, ব্ল্যাক বক্স হিসাবে ইতিমধ্যে প্রশিক্ষিত, শুধুমাত্র শ্রেণীবিভাগের মাথাকে পুনরায় প্রশিক্ষণ দেওয়া। এটি ট্রান্সফার লার্নিং। আমরা পরবর্তীতে দেখতে পাব যে এই জটিল স্তরগুলির এই জটিল বিন্যাসগুলি কীভাবে কাজ করে। আপাতত, এটা অন্য কারো সমস্যা।
কেরাসে শিক্ষা স্থানান্তর করুন
কেরাসে, আপনি 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()
স্তরটি ঢোকানো লক্ষ্য করুন। ঘন স্তরগুলি ডেটার ফ্ল্যাট ভেক্টরগুলিতে কাজ করে তবে আমরা জানি না যে এটি পূর্বপ্রশিক্ষিত মডেলটি ফেরত দেয় কিনা। সেজন্য আমাদের সমতল করা দরকার। পরের অধ্যায়ে, আমরা রূপান্তরমূলক স্থাপত্যগুলিতে ডুব দেওয়ার সময়, আমরা রূপান্তরমূলক স্তরগুলির দ্বারা ফিরে আসা ডেটা বিন্যাসটি ব্যাখ্যা করব।
এই পদ্ধতির সাথে আপনার 75% নির্ভুলতা পাওয়া উচিত।
সমাধান
এখানে সমাধান নোটবুক. আপনি আটকে থাকলে আপনি এটি ব্যবহার করতে পারেন।
Keras Flowers transfer learning (solution).ipynb
আমরা কভার করেছি কি
- 🤔 কিভাবে কেরাসে একটি শ্রেণীবিভাগ লিখবেন
- 🤓 একটি সফটম্যাক্স লাস্ট লেয়ার এবং ক্রস-এনট্রপি লস দিয়ে কনফিগার করা হয়েছে
- 😈 ট্রান্সফার লার্নিং
- 🤔 আপনার প্রথম মডেল প্রশিক্ষণ
- 🧐 প্রশিক্ষণের সময় এর ক্ষতি এবং নির্ভুলতা অনুসরণ করা
আপনার মাথায় এই চেকলিস্টের মধ্য দিয়ে যাওয়ার জন্য অনুগ্রহ করে একটু সময় নিন।
5. অভিনন্দন!
আপনি এখন কেরাস মডেল তৈরি করতে পারেন। কনভোলিউশনাল লেয়ারগুলিকে কীভাবে একত্র করতে হয় তা শিখতে অনুগ্রহ করে পরবর্তী ল্যাবে চালিয়ে যান।
- TPU-গতির ডেটা পাইপলাইন: tf.data.Dataset এবং TFRecords
- [এই ল্যাব] আপনার প্রথম কেরাস মডেল, ট্রান্সফার লার্নিং সহ
- কেরাস এবং টিপিইউ সহ কনভোল্যুশনাল নিউরাল নেটওয়ার্ক
- কেরাস এবং টিপিইউ সহ আধুনিক কনভনেট, স্কুইজেনেট, এক্সসেপশন
অনুশীলনে TPUs
ক্লাউড এআই প্ল্যাটফর্মে টিপিইউ এবং জিপিইউ পাওয়া যায়:
অবশেষে, আমরা প্রতিক্রিয়া পছন্দ করি। আপনি যদি এই ল্যাবে কিছু ভুল দেখেন বা আপনি যদি মনে করেন এটি উন্নত করা উচিত তাহলে অনুগ্রহ করে আমাদের বলুন৷ গিটহাব সমস্যার মাধ্যমে প্রতিক্রিয়া প্রদান করা যেতে পারে [ প্রতিক্রিয়া লিঙ্ক ]।
|