এই কোডল্যাব সম্পর্কে
1. তুমি শুরু করার আগে
এই কোডল্যাবে, আপনি ML-এর মৌলিক "হ্যালো, ওয়ার্ল্ড" শিখবেন, যেখানে জাভা বা সি++-এর মতো ভাষায় প্রোগ্রামিংয়ের সুস্পষ্ট নিয়মের পরিবর্তে, আপনি নিয়মগুলি নির্ধারণ করার জন্য ডেটার উপর প্রশিক্ষিত একটি সিস্টেম তৈরি করবেন সংখ্যার মধ্যে সম্পর্ক।
নিম্নলিখিত সমস্যাটি বিবেচনা করুন: আপনি একটি সিস্টেম তৈরি করছেন যা ফিটনেস ট্র্যাকিংয়ের জন্য কার্যকলাপ স্বীকৃতি দেয়৷ একজন ব্যক্তি যে গতিতে হাঁটছে আপনার কাছে অ্যাক্সেস থাকতে পারে এবং শর্তসাপেক্ষ ব্যবহার করে সেই গতির উপর ভিত্তি করে তাদের কার্যকলাপ অনুমান করার চেষ্টা করতে পারে।
if(speed<4){
status=WALKING;
}
আপনি অন্য শর্ত সহ চলমান যে প্রসারিত করতে পারেন.
if(speed<4){
status=WALKING;
} else {
status=RUNNING;
}
একটি চূড়ান্ত অবস্থায়, আপনি একইভাবে সাইক্লিং সনাক্ত করতে পারেন।
if(speed<4){
status=WALKING;
} else if(speed<12){
status=RUNNING;
} else {
status=BIKING;
}
এখন, আপনি যখন গল্ফের মতো একটি কার্যকলাপ অন্তর্ভুক্ত করতে চান তখন কী ঘটে তা বিবেচনা করুন। ক্রিয়াকলাপ নির্ধারণ করার জন্য কীভাবে একটি নিয়ম তৈরি করতে হয় তা কম স্পষ্ট।
// Now what?
গল্ফিং কার্যকলাপ চিনতে পারে এমন একটি প্রোগ্রাম লেখা খুবই কঠিন, তাই আপনি কি করবেন? আপনি সমস্যা সমাধান করতে ML ব্যবহার করতে পারেন!
পূর্বশর্ত
এই কোডল্যাবটি চেষ্টা করার আগে, আপনি এটি করতে চাইবেন:
- পাইথন সম্পর্কে একটি কঠিন জ্ঞান
- মৌলিক প্রোগ্রামিং দক্ষতা
আপনি কি শিখবেন
- মেশিন লার্নিং এর মৌলিক বিষয়
আপনি কি নির্মাণ করবেন
- আপনার প্রথম মেশিন লার্নিং মডেল
আপনি কি প্রয়োজন হবে
আপনি যদি TensorFlow ব্যবহার করে কোনো ML মডেল তৈরি না করে থাকেন, তাহলে আপনি Colaboratory ব্যবহার করতে পারেন, একটি ব্রাউজার-ভিত্তিক পরিবেশ যেখানে সমস্ত প্রয়োজনীয় নির্ভরতা রয়েছে। আপনি Colab- এ চলমান বাকি কোডল্যাবের কোড খুঁজে পেতে পারেন।
আপনি যদি একটি ভিন্ন IDE ব্যবহার করেন, তাহলে নিশ্চিত করুন যে আপনি Python ইনস্টল করেছেন। আপনার TensorFlow এবং NumPy লাইব্রেরিও লাগবে। আপনি এখানে TensorFlow সম্পর্কে আরও জানতে এবং ইনস্টল করতে পারেন। এখানে NumPy ইনস্টল করুন।
2. এমএল কি?
নিম্নলিখিত চিত্রে উপস্থাপিত অ্যাপ তৈরির ঐতিহ্যগত পদ্ধতি বিবেচনা করুন:
আপনি একটি প্রোগ্রামিং ভাষায় নিয়ম প্রকাশ করেন। তারা ডেটার উপর কাজ করে এবং আপনার প্রোগ্রাম উত্তর দেয় **.** কার্যকলাপ সনাক্তকরণের ক্ষেত্রে, নিয়মগুলি (যে কোডটি আপনি কার্যকলাপের ধরনগুলিকে সংজ্ঞায়িত করতে লিখেছেন) একটি উত্তর তৈরি করতে ডেটার (ব্যক্তির গতিবিধি) উপর কাজ করে: ব্যবহারকারীর কার্যকলাপের অবস্থা নির্ধারণের জন্য ফাংশন থেকে রিটার্ন মান (তারা হাঁটছে, দৌড়াচ্ছে, বাইক চালাচ্ছে বা অন্য কিছু করছে কিনা)।
ML এর মাধ্যমে সেই কার্যকলাপের স্থিতি সনাক্ত করার প্রক্রিয়াটি খুব অনুরূপ, শুধুমাত্র অক্ষগুলি ভিন্ন।
নিয়মগুলি সংজ্ঞায়িত করার এবং একটি প্রোগ্রামিং ভাষায় প্রকাশ করার চেষ্টা করার পরিবর্তে, আপনি ডেটা সহ উত্তরগুলি প্রদান করেন (সাধারণত লেবেল বলা হয়) এবং মেশিনটি এমন নিয়মগুলি অনুমান করে যা উত্তর এবং ডেটার মধ্যে সম্পর্ক নির্ধারণ করে৷ উদাহরণস্বরূপ, আপনার অ্যাক্টিভিটি সনাক্তকরণের দৃশ্য একটি ML প্রসঙ্গে দেখতে এইরকম হতে পারে:
আপনি প্রচুর ডেটা সংগ্রহ করেন এবং কার্যকরভাবে বলার জন্য এটিকে লেবেল করেন, "হাঁটা এমন দেখায়" বা "দৌড়ানোর মতই এটি।" তারপরে, কম্পিউটার সেই নিয়মগুলি অনুমান করতে পারে যা নির্ধারণ করে, ডেটা থেকে, একটি নির্দিষ্ট ক্রিয়াকলাপের স্বতন্ত্র প্যাটার্নগুলি কী কী।
সেই দৃশ্যের প্রোগ্রামিং করার জন্য একটি বিকল্প পদ্ধতির বাইরেও, সেই পদ্ধতিটি আপনাকে নতুন পরিস্থিতি খোলার ক্ষমতা দেয়, যেমন গল্ফিং যা নিয়ম-ভিত্তিক ঐতিহ্যগত প্রোগ্রামিং পদ্ধতির অধীনে সম্ভব নাও হতে পারে।
ঐতিহ্যগত প্রোগ্রামিংয়ে, আপনার কোড একটি বাইনারিতে কম্পাইল করে যাকে সাধারণত একটি প্রোগ্রাম বলা হয়। ML-এ, আপনি ডেটা এবং লেবেল থেকে যে আইটেমটি তৈরি করেন তাকে মডেল বলা হয়।
সুতরাং, আপনি যদি এই চিত্রটিতে ফিরে যান:
এর ফলাফলটিকে একটি মডেল হিসাবে বিবেচনা করুন, যা রানটাইমে এইভাবে ব্যবহৃত হয়:
আপনি মডেলটিকে কিছু ডেটা পাস করেন এবং মডেলটি একটি ভবিষ্যদ্বাণী করতে প্রশিক্ষণ থেকে অনুমান করা নিয়মগুলি ব্যবহার করে, যেমন, "সেটি ডেটা হাঁটার মতো দেখায়," বা "সেটি ডেটা বাইক চালানোর মতো দেখায়।"
3. আপনার প্রথম ML মডেল তৈরি করুন
নিম্নলিখিত সংখ্যার সেট বিবেচনা করুন। আপনি তাদের মধ্যে সম্পর্ক দেখতে পারেন?
এক্স: | -1 | 0 | 1 | 2 | 3 | 4 |
Y: | -2 | 1 | 4 | 7 | 10 | 13 |
আপনি যখন তাদের দিকে তাকান, আপনি হয়তো লক্ষ্য করবেন যে X-এর মান 1 দ্বারা বৃদ্ধি পাচ্ছে যখন আপনি বাম থেকে ডানে পড়ছেন এবং Y-এর অনুরূপ মান 3 দ্বারা বৃদ্ধি পাচ্ছে। আপনি সম্ভবত মনে করেন যে Y 3X প্লাস বা বিয়োগ কিছুর সমান। তারপরে, আপনি সম্ভবত X এর 0 এর দিকে তাকাবেন এবং দেখতে পাবেন যে Y হল 1, এবং আপনি Y=3X+1 সম্পর্ক নিয়ে আসবেন।
এটি প্রায় ঠিক যেভাবে আপনি ডেটাতে নিদর্শনগুলি চিহ্নিত করতে একটি মডেলকে প্রশিক্ষণ দেওয়ার জন্য কোড ব্যবহার করবেন!
এখন, এটি করার জন্য কোডটি দেখুন।
সমতুল্য কাজ করার জন্য আপনি কীভাবে একটি নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দেবেন? ডেটা ব্যবহার করে! এটিকে X এর একটি সেট এবং Y এর একটি সেট দিয়ে খাওয়ানোর মাধ্যমে এটি তাদের মধ্যে সম্পর্কটি বের করতে সক্ষম হওয়া উচিত।
আমদানি
আপনার আমদানি দিয়ে শুরু করুন. এখানে, আপনি TensorFlow আমদানি করছেন এবং এটিকে tf
কল করছেন ব্যবহারের সুবিধার জন্য।
এর পরে, numpy
নামক একটি লাইব্রেরি আমদানি করুন, যা আপনার ডেটা সহজে এবং দ্রুত তালিকা হিসাবে উপস্থাপন করে।
অনুক্রমিক স্তরগুলির একটি সেট হিসাবে একটি নিউরাল নেটওয়ার্ককে সংজ্ঞায়িত করার কাঠামোকে keras
বলা হয়, তাই এটিও আমদানি করুন।
import tensorflow as tf
import numpy as np
from tensorflow import keras
নিউরাল নেটওয়ার্ক সংজ্ঞায়িত করুন এবং সংকলন করুন
পরবর্তী, সহজতম সম্ভাব্য নিউরাল নেটওয়ার্ক তৈরি করুন। এটির একটি স্তর রয়েছে, সেই স্তরটিতে একটি নিউরন রয়েছে এবং এটির ইনপুট আকারটি কেবল একটি মান।
model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
এরপরে, আপনার নিউরাল নেটওয়ার্ক কম্পাইল করার জন্য কোডটি লিখুন। যখন আপনি তা করেন, আপনাকে দুটি ফাংশন নির্দিষ্ট করতে হবে - একটি loss
এবং একটি optimizer
৷
এই উদাহরণে, আপনি জানেন যে সংখ্যার মধ্যে সম্পর্ক হল Y=3X+1।
যখন কম্পিউটার এটি শেখার চেষ্টা করে, তখন এটি একটি অনুমান করে, সম্ভবত Y=10X+10। loss
ফাংশন পরিচিত সঠিক উত্তরগুলির বিপরীতে অনুমান করা উত্তরগুলি পরিমাপ করে এবং এটি কতটা ভাল বা খারাপভাবে হয়েছিল তা পরিমাপ করে৷
এর পরে, মডেলটি অন্য অনুমান করতে optimizer
ফাংশন ব্যবহার করে। লস ফাংশনের ফলাফলের উপর ভিত্তি করে, এটি ক্ষতি কমানোর চেষ্টা করে। এই মুহুর্তে, সম্ভবত এটি Y=5X+5 এর মতো কিছু নিয়ে আসবে। যদিও এটি এখনও বেশ খারাপ, এটি সঠিক ফলাফলের কাছাকাছি (ক্ষতি কম)।
মডেলটি যুগের সংখ্যার জন্য এটি পুনরাবৃত্তি করে, যা আপনি শীঘ্রই দেখতে পাবেন।
প্রথমে, ক্ষতির জন্য mean_squared_error
এবং অপটিমাইজারের জন্য স্টকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট ( sgd
) ব্যবহার করার জন্য এটিকে কীভাবে বলতে হয় তা এখানে। আপনার এখনও তাদের জন্য গণিত বোঝার দরকার নেই, তবে আপনি দেখতে পাচ্ছেন যে তারা কাজ করে!
সময়ের সাথে সাথে, আপনি বিভিন্ন পরিস্থিতিতে বিভিন্ন এবং উপযুক্ত ক্ষতি এবং অপ্টিমাইজার ফাংশন শিখবেন।
model.compile(optimizer='sgd', loss='mean_squared_error')
তথ্য সরবরাহ করুন
এর পরে, কিছু ডেটা ফিড করুন। এই ক্ষেত্রে, আপনি আগের থেকে ছয়টি X এবং ছয় Y ভেরিয়েবল নিন। আপনি দেখতে পাচ্ছেন যে তাদের মধ্যে সম্পর্কটি হল Y =3 X +1, সুতরাং যেখানে X হল -1, Y হল -2।
NumPy নামক একটি পাইথন লাইব্রেরি এটি করার জন্য প্রচুর অ্যারে টাইপ ডেটা স্ট্রাকচার সরবরাহ করে। np.array[]
সহ NumPy-এ একটি অ্যারে হিসাবে মানগুলি নির্দিষ্ট করুন।
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)
এখন আপনার কাছে নিউরাল নেটওয়ার্ক সংজ্ঞায়িত করার জন্য প্রয়োজনীয় সমস্ত কোড রয়েছে। পরবর্তী ধাপ হল এটিকে প্রশিক্ষণ দেওয়া যে এটি সেই সংখ্যাগুলির মধ্যে প্যাটার্নগুলি অনুমান করতে পারে এবং একটি মডেল তৈরি করতে ব্যবহার করতে পারে কিনা।
4. নিউরাল নেটওয়ার্ক প্রশিক্ষণ
নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দেওয়ার প্রক্রিয়া, যেখানে এটি X 's এবং Y 's এর মধ্যে সম্পর্ক শিখেছে, model.fit
কলে রয়েছে। এটি একটি অনুমান করার আগে লুপের মধ্য দিয়ে যাবে, এটি কতটা ভাল বা খারাপ তা পরিমাপ করবে (ক্ষতি), বা অন্য অনুমান করতে অপ্টিমাইজার ব্যবহার করে। এটি আপনার নির্দিষ্ট করা যুগের সংখ্যার জন্য এটি করবে। আপনি যখন সেই কোডটি চালাবেন, আপনি দেখতে পাবেন যে ক্ষতি প্রতিটি যুগের জন্য মুদ্রিত হবে।
model.fit(xs, ys, epochs=500)
উদাহরণস্বরূপ, আপনি দেখতে পাচ্ছেন যে প্রথম কয়েক যুগের জন্য, ক্ষতির মান বেশ বড়, কিন্তু প্রতিটি ধাপে এটি ছোট হয়ে আসছে।
প্রশিক্ষণের অগ্রগতির সাথে সাথে ক্ষতি খুব কম হয়ে যায়।
প্রশিক্ষণ শেষ হওয়ার সময়, ক্ষতি অত্যন্ত ছোট, এটি দেখায় যে আমাদের মডেল সংখ্যার মধ্যে সম্পর্ক অনুমান করার জন্য একটি দুর্দান্ত কাজ করছে।
আপনার সম্ভবত সমস্ত 500 যুগের প্রয়োজন নেই এবং বিভিন্ন পরিমাণে পরীক্ষা করতে পারেন। আপনি উদাহরণ থেকে দেখতে পাচ্ছেন, মাত্র 50টি যুগের পরে ক্ষতি সত্যিই ছোট, তাই এটি যথেষ্ট হতে পারে!
5. মডেল ব্যবহার করুন
আপনার কাছে একটি মডেল আছে যাকে X এবং Y-এর মধ্যে সম্পর্ক শেখার জন্য প্রশিক্ষণ দেওয়া হয়েছে৷ আপনি মডেল. model.predict
পদ্ধতিটি ব্যবহার করতে পারেন যাতে এটি পূর্বে অজানা X-এর জন্য Y বের করতে পারে৷ উদাহরণস্বরূপ, যদি X হয় 10, আপনি কি মনে করেন৷ Y হবে? আপনি নিম্নলিখিত কোড চালানোর আগে একটি অনুমান নিন:
print(model.predict([10.0]))
আপনি 31 ভেবে থাকতে পারেন, তবে এটি কিছুটা শেষ হয়ে গেছে। আপনি কেন যে মনে করেন?
নিউরাল নেটওয়ার্কগুলি সম্ভাব্যতার সাথে কাজ করে, তাই এটি গণনা করে যে X এবং Y এর মধ্যে সম্পর্কটি Y=3X+1 হওয়ার একটি খুব বেশি সম্ভাবনা রয়েছে, তবে এটি শুধুমাত্র ছয়টি ডেটা পয়েন্টের সাথে নিশ্চিতভাবে জানতে পারে না। ফলাফল 31 এর খুব কাছাকাছি, কিন্তু অগত্যা 31 নয়।
আপনি নিউরাল নেটওয়ার্কগুলির সাথে কাজ করার সাথে সাথে আপনি সেই প্যাটার্নটি পুনরাবৃত্ত দেখতে পাবেন। আপনি প্রায় সর্বদা সম্ভাব্যতার সাথে মোকাবিলা করবেন, নিশ্চিততা নয়, এবং সম্ভাব্যতার উপর ভিত্তি করে ফলাফলটি কী তা নির্ধারণ করতে কিছুটা কোডিং করবেন, বিশেষত যখন এটি শ্রেণিবিন্যাসের ক্ষেত্রে আসে।
6. অভিনন্দন
বিশ্বাস করুন বা না করুন, আপনি ML-এর বেশিরভাগ ধারণাগুলি কভার করেছেন যা আপনি আরও জটিল পরিস্থিতিতে ব্যবহার করবেন। আপনি শিখেছেন কিভাবে নেটওয়ার্ক সংজ্ঞায়িত করে দুটি সেট সংখ্যার মধ্যে সম্পর্ক খুঁজে বের করতে একটি নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দিতে হয়। আপনি স্তরগুলির একটি সেট সংজ্ঞায়িত করেছেন (এই ক্ষেত্রে শুধুমাত্র একটি) যেটিতে নিউরন রয়েছে (এ ক্ষেত্রেও, শুধুমাত্র একটি), যা আপনি একটি লস ফাংশন এবং একটি অপ্টিমাইজার দিয়ে সংকলন করেছেন।
একটি নেটওয়ার্কের সংগ্রহ, ক্ষতি ফাংশন, এবং অপ্টিমাইজার সংখ্যার মধ্যে সম্পর্ক অনুমান করার প্রক্রিয়া পরিচালনা করে, তারা কতটা ভাল করেছে তা পরিমাপ করে এবং তারপর নতুন অনুমানের জন্য নতুন প্যারামিটার তৈরি করে। TensorFlow.org এ আরও জানুন।
আরও জানুন
কিভাবে ML এবং TensorFlow আপনার কম্পিউটার ভিশন মডেলে সাহায্য করতে পারে সে সম্পর্কে জানতে, TensorFlow এর সাথে একটি কম্পিউটার ভিশন মডেল তৈরি করতে এগিয়ে যান।