Python/Keras দিয়ে CNN তৈরি

Machine Learning - পাইথন কৃত্রিম বুদ্ধিমত্তা (Artificial Intelligence with Python) - কনভলিউশনাল নিউরাল নেটওয়ার্ক (CNN)
299

Convolutional Neural Networks (CNNs) হলো একটি ডিপ লার্নিং মডেল যা বিশেষভাবে চিত্র বিশ্লেষণ (Image Analysis) এবং কম্পিউটার ভিশন (Computer Vision) এর জন্য ব্যবহৃত হয়। CNN বিভিন্ন লেয়ারের মাধ্যমে চিত্রের বৈশিষ্ট্য (features) বের করে এবং শ্রেণীবিভাগের জন্য একটি আউটপুট তৈরি করে।

Keras হল একটি উচ্চ স্তরের নিউরাল নেটওয়ার্ক API যা TensorFlow বা Theano এর উপরে কাজ করে। এটি CNN তৈরি করা খুবই সহজ করে তোলে।

CNN তৈরির মূল স্তম্ভ

CNN তৈরি করতে কিছু প্রধান স্তম্ভ রয়েছে:

  1. Convolutional Layer: এটি ইনপুট ইমেজের সাথে কনভোলিউশন অপারেশন চালায় এবং বৈশিষ্ট্য ম্যাপ (feature map) তৈরি করে।
  2. Pooling Layer: এটি বৈশিষ্ট্য ম্যাপের আকার কমায় (ফিচার রিডাকশন) এবং অতিরিক্ত তথ্য বাদ দেয় (যেমন Max Pooling বা Average Pooling)।
  3. Fully Connected Layer: এটি চূড়ান্ত আউটপুট প্রদান করে এবং সাধারণত লজিস্টিক রিগ্রেশন বা স্নায়ুতন্ত্রের (neural network) মধ্যে একাধিক নিউরন থাকে।
  4. Flatten Layer: এটি কনভোলিউশনাল লেয়ারগুলির আউটপুটকে 1D ভেক্টরে রূপান্তরিত করে, যা পুরো নেটওয়ার্কের জন্য ইনপুট হিসেবে কাজ করবে।

Python/Keras দিয়ে CNN তৈরি করার উদাহরণ

এখানে একটি সাধারণ CNN তৈরি করা হচ্ছে যা CIFAR-10 dataset এর চিত্র ক্লাসিফিকেশন সমস্যা সমাধান করবে। CIFAR-10 ডেটাসেটটি 10টি শ্রেণিতে বিভক্ত 60,000 চিত্রের একটি ডেটাসেট।

প্রয়োজনীয় লাইব্রেরি ইনস্টল করা

pip install tensorflow keras numpy matplotlib

CNN মডেল তৈরি

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.utils import to_categorical

# CIFAR-10 ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

# ডেটা স্কেলিং: 0 থেকে 255 এর পরিবর্তে 0 থেকে 1 এর মধ্যে নিয়ে আসা
x_train, x_test = x_train / 255.0, x_test / 255.0

# আউটপুট লেবেল গুলোর One-hot এনকোডিং
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

# CNN মডেল তৈরি করা
model = Sequential()

# প্রথম কনভোলিউশনাল লেয়ার
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))

# ম্যাক্স পুলিং
model.add(MaxPooling2D(pool_size=(2, 2)))

# দ্বিতীয় কনভোলিউশনাল লেয়ার
model.add(Conv2D(64, (3, 3), activation='relu'))

# ম্যাক্স পুলিং
model.add(MaxPooling2D(pool_size=(2, 2)))

# তৃতীয় কনভোলিউশনাল লেয়ার
model.add(Conv2D(64, (3, 3), activation='relu'))

# ফ্ল্যাটেনিং
model.add(Flatten())

# পুরোপুরি সংযুক্ত লেয়ার
model.add(Dense(64, activation='relu'))

# আউটপুট লেয়ার
model.add(Dense(10, activation='softmax'))

# মডেল সারাংশ
model.summary()

# মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# মডেল প্রশিক্ষণ
model.fit(x_train, y_train, epochs=10, batch_size=64, validation_data=(x_test, y_test))

# মডেল মূল্যায়ন
test_loss, test_acc = model.evaluate(x_test, y_test)
print("Test accuracy:", test_acc)

কোড ব্যাখ্যা

  1. ডেটা লোডিং এবং প্রিপ্রসেসিং:
    • CIFAR-10 dataset লোড করা হয়েছে যা 32x32 px আকারের চিত্র ধারণ করে।
    • চিত্রগুলিকে স্কেল করা হয়েছে (0 থেকে 1 পর্যন্ত) যাতে প্রশিক্ষণের সময় মানের পার্থক্য না আসে।
    • আউটপুট লেবেলগুলোকে One-hot Encoding করা হয়েছে, যার মাধ্যমে প্রতিটি লেবেলকে একটি বাইনারি অ্যারে (যেমন [0, 1, 0, 0, ...]) তে রূপান্তর করা হয়েছে।
  2. মডেল স্থাপন:
    • প্রথমে একটি Conv2D লেয়ার যোগ করা হয়েছে, যা চিত্রের বৈশিষ্ট্য (features) বের করে।
    • এরপর একটি MaxPooling2D লেয়ার যোগ করা হয়েছে, যা ইমেজের আকার কমিয়ে দেয়।
    • মডেলে আরও কনভোলিউশনাল এবং পুলিং লেয়ার যোগ করা হয়েছে।
    • শেষ লেয়ার হিসেবে একটি Flatten লেয়ার ব্যবহার করা হয়েছে যাতে 2D আউটপুট 1D ভেক্টরে রূপান্তরিত হয়, যা পরবর্তী নিউরাল নেটওয়ার্কের ইনপুট হিসেবে কাজ করবে।
    • আউটপুট লেয়ারটি Dense(10, softmax) দিয়ে শেষ হয়েছে, কারণ এটি 10টি শ্রেণির মধ্যে আউটপুট প্রদান করবে।
  3. মডেল কম্পাইল:
    • Adam optimizer ব্যবহার করা হয়েছে, যা দ্রুত এবং কার্যকরী পদ্ধতিতে মডেল প্রশিক্ষণ করতে সহায়তা করে।
    • Categorical Crossentropy ব্যবহার করা হয়েছে লস ফাংশন হিসেবে, কারণ এটি মাল্টি-ক্লাস ক্লাসিফিকেশনে উপযুক্ত।
  4. মডেল প্রশিক্ষণ:
    • fit() ফাংশন ব্যবহার করে মডেলটি 10টি এপোক (epochs) ধরে প্রশিক্ষিত হয়েছে।
  5. মডেল মূল্যায়ন:
    • evaluate() ফাংশন ব্যবহার করে মডেলের পারফরম্যান্স পরীক্ষা করা হয়েছে।

সারাংশ

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

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...