FNN (Feedforward Neural Network) হলো একটি সাধারণ নিউরাল নেটওয়ার্ক আর্কিটেকচার যেখানে ইনপুট লেয়ার থেকে আউটপুট লেয়ারে ডেটা একপথে প্রবাহিত হয় (ফিডফরওয়ার্ড)। এটি মেশিন লার্নিং সমস্যাগুলির জন্য খুবই জনপ্রিয়, যেমন ক্লাসিফিকেশন এবং রিগ্রেশন। PyBrain ব্যবহার করে একটি FNN তৈরি করার জন্য নিচে বিস্তারিত উদাহরণ দেওয়া হলো।
১. প্রয়োজনীয় লাইব্রেরি ইনপোর্ট করা
প্রথমে PyBrain এবং অন্যান্য প্রয়োজনীয় লাইব্রেরি ইনপোর্ট করতে হবে।
from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import ClassificationDataSet
from pybrain.supervised import BackpropTrainer
- buildNetwork: এটি একটি ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক তৈরি করতে ব্যবহৃত হয়।
- ClassificationDataSet: এটি একটি ডেটাসেট তৈরি করতে ব্যবহৃত হয় যেটি ক্লাসিফিকেশন সমস্যার জন্য উপযোগী।
- BackpropTrainer: এটি একটি ট্রেনিং টুল যা ব্যাকপ্রপাগেশন অ্যালগরিদম ব্যবহার করে নেটওয়ার্ক ট্রেনিং করবে।
২. ডেটাসেট তৈরি করা
এখানে একটি সিম্পল ক্লাসিফিকেশন ডেটাসেট তৈরি করা হচ্ছে, যেখানে দুটি ইনপুট ফিচার এবং একটি আউটপুট ফিচার থাকবে। আউটপুটটি দুটি ক্লাসের মধ্যে বিভক্ত হবে (0 অথবা 1)।
# ডেটাসেট তৈরি করা (2 ইনপুট, 1 আউটপুট)
dataset = ClassificationDataSet(2, 1)
# ডেটাসেটে কিছু উদাহরণ যোগ করা
dataset.addSample([0.1, 0.2], [1])
dataset.addSample([0.3, 0.4], [0])
dataset.addSample([0.5, 0.6], [1])
dataset.addSample([0.7, 0.8], [0])
dataset.addSample([0.9, 1.0], [1])
# ডেটাসেটকে শাফল করা
dataset._convertToOneOfMany()
- addSample: এটি ইনপুট ডেটা এবং তার সংশ্লিষ্ট আউটপুট লেবেল যোগ করতে ব্যবহৃত হয়।
- _convertToOneOfMany(): এটি আউটপুট লেবেলগুলিকে "one-hot" ফরম্যাটে রূপান্তরিত করে, যা ক্লাসিফিকেশন সমস্যায় ব্যবহৃত হয়।
৩. নিউরাল নেটওয়ার্ক তৈরি করা
এখন আমরা একটি ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক তৈরি করব, যেখানে ২টি ইনপুট, ৩টি হিডেন নোড এবং ১টি আউটপুট নোড থাকবে।
# নিউরাল নেটওয়ার্ক তৈরি করা (2 ইনপুট, 3 হিডেন, 1 আউটপুট)
network = buildNetwork(2, 3, 1)
এখানে:
- 2: ইনপুট লেয়ার (২টি ইনপুট ফিচার)
- 3: হিডেন লেয়ার (৩টি হিডেন নোড)
- 1: আউটপুট লেয়ার (১টি আউটপুট)
৪. ট্রেইনার তৈরি করা এবং মডেল ট্রেনিং করা
এখন আমরা BackpropTrainer ব্যবহার করে নেটওয়ার্কটি ট্রেনিং করব।
# ট্রেইনার তৈরি করা
trainer = BackpropTrainer(network, dataset)
# মডেল ট্রেনিং করা
trainer.trainEpochs(1000)
- trainEpochs(1000): এটি 1000 বার ট্রেনিং করবে, যাতে নেটওয়ার্কটি ডেটাসেটের উপর শিখতে পারে।
৫. ফলাফল পরীক্ষা করা
ট্রেনিং শেষে, আমরা নেটওয়ার্কটি কিছু নতুন ইনপুট দিয়ে পরীক্ষা করতে পারি এবং আউটপুট দেখতে পারি।
# নেটওয়ার্কের আউটপুট দেখা
output = network.activate([0.5, 0.6])
print("Output for input [0.5, 0.6]: ", output)
এখানে, আমরা network.activate() ফাংশন ব্যবহার করে নতুন ইনপুট ডেটার জন্য আউটপুট প্রাপ্তি করছি।
পুরো কোডটি একত্রে:
from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import ClassificationDataSet
from pybrain.supervised import BackpropTrainer
# ডেটাসেট তৈরি করা (2 ইনপুট, 1 আউটপুট)
dataset = ClassificationDataSet(2, 1)
dataset.addSample([0.1, 0.2], [1])
dataset.addSample([0.3, 0.4], [0])
dataset.addSample([0.5, 0.6], [1])
dataset.addSample([0.7, 0.8], [0])
dataset.addSample([0.9, 1.0], [1])
dataset._convertToOneOfMany()
# নিউরাল নেটওয়ার্ক তৈরি করা (2 ইনপুট, 3 হিডেন, 1 আউটপুট)
network = buildNetwork(2, 3, 1)
# ট্রেইনার তৈরি করা
trainer = BackpropTrainer(network, dataset)
# মডেল ট্রেনিং করা
trainer.trainEpochs(1000)
# নেটওয়ার্কের আউটপুট দেখা
output = network.activate([0.5, 0.6])
print("Output for input [0.5, 0.6]: ", output)
সারাংশ
এই উদাহরণে, PyBrain ব্যবহার করে একটি ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক (FNN) তৈরি করা হয়েছে, যেখানে ডেটাসেট যোগ করে এবং ব্যাকপ্রপাগেশন অ্যালগরিদম ব্যবহার করে নেটওয়ার্কটি ট্রেনিং করা হয়েছে। এর মাধ্যমে একটি সহজ ক্লাসিফিকেশন সমস্যা সমাধান করা হয়েছে।