Image Classification এর জন্য CNN তৈরি

Convolutional Neural Networks (CNN) - কেরাস (Keras) - Machine Learning

460

Convolutional Neural Networks (CNN) হলো ডীপ লার্নিংয়ের একটি শক্তিশালী আর্কিটেকচার, যা প্রধানত Image ClassificationComputer Vision এর জন্য ব্যবহৃত হয়। CNN এর মাধ্যমে আপনি সহজেই ইমেজ থেকে বৈশিষ্ট্য (features) শিখতে পারেন, যা ক্লাসিফিকেশন প্রক্রিয়াকে আরও উন্নত করে।

এখানে, আমরা একটি CNN তৈরি করার পদ্ধতি দেখবো যা Image Classification এর জন্য ব্যবহার করা যেতে পারে। আমরা Python এবং Keras ব্যবহার করে এই মডেলটি তৈরি করবো।

১. লাইব্রেরি ইনস্টল করা

প্রথমে, প্রয়োজনীয় লাইব্রেরি ইনস্টল করুন, যদি ইতিমধ্যে ইনস্টল না থাকে।

pip install tensorflow numpy matplotlib

এখানে, আমরা TensorFlow ব্যবহার করবো, যা Keras এর মাধ্যমে CNN তৈরি করতে সহায়তা করবে, এবং Matplotlib ইমেজ ভিজ্যুয়ালাইজেশন এর জন্য ব্যবহৃত হবে।

২. ডেটাসেট লোড এবং প্রস্তুতি

এখানে আমরা CIFAR-10 ডেটাসেট ব্যবহার করবো, যা ১০টি ভিন্ন ক্লাসের ৬০,০০০ ইমেজ দিয়ে তৈরি। এটি সহজেই TensorFlow/Keras এর মাধ্যমে লোড করা যায়।

import tensorflow as tf
from tensorflow.keras.datasets import cifar10
import matplotlib.pyplot as plt

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

# ডেটার শেপ চেক করা
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)

# ডেটার প্রথম ১০টি ইমেজ ভিজ্যুয়ালাইজ করা
fig, axes = plt.subplots(1, 10, figsize=(15, 2))
for i in range(10):
    axes[i].imshow(X_train[i])
    axes[i].axis('off')
plt.show()

এটি CIFAR-10 ডেটাসেট থেকে প্রথম ১০টি ইমেজ প্রদর্শন করবে।

৩. ডেটা প্রিপ্রসেসিং

ইমেজ ডেটা প্রিপ্রসেসিং করা গুরুত্বপূর্ণ, যেমন ডেটা নর্মালাইজেশন এবং লেবেল এনকোডিং।

# ইমেজ ডেটা নর্মালাইজ করা (0-255 থেকে 0-1 রেঞ্জে)
X_train = X_train / 255.0
X_test = X_test / 255.0

# লেবেলগুলি 0 থেকে 9 এর মধ্যে (one-hot এনকোডিং)
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)

৪. CNN মডেল তৈরি করা

এখন আমরা একটি সহজ CNN তৈরি করবো:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

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

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

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

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

# ডেঞ্চ লেয়ার
model.add(Flatten())  # ফ্ল্যাট করে কনভোলিউশনাল আউটপুটকে ডেঞ্চ লেয়ারে পরিণত করা
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))  # ওভারফিটিং কমাতে ড্রপআউট

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

এটি একটি বেসিক CNN আর্কিটেকচার। এখানে:

  • Conv2D: কনভোলিউশনাল লেয়ার যা ফিচার শিখতে সহায়তা করে।
  • MaxPooling2D: পুলিং লেয়ার যা ফিচার ম্যাপের আকার ছোট করে এবং মডেলটি দ্রুত প্রশিক্ষিত হতে সাহায্য করে।
  • Flatten: কনভোলিউশনাল আউটপুটকে একটি একক ভেক্টরে রূপান্তরিত করে, যাতে এটি ডেঞ্চ লেয়ারে পাঠানো যায়।
  • Dense: পুরো সংযুক্ত লেয়ার, যা সিদ্ধান্ত গ্রহণের জন্য কাজ করে।
  • Dropout: ড্রপআউট লেয়ার ব্যবহার করে মডেলকে ওভারফিটিং থেকে রক্ষা করা হয়।

৫. মডেল কম্পাইল করা

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

এখানে আমরা Adam optimizer এবং Categorical Crossentropy loss ফাংশন ব্যবহার করেছি, যা মাল্টি-ক্লাস ক্লাসিফিকেশনের জন্য উপযুক্ত।

৬. মডেল প্রশিক্ষণ

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

এখানে, আমরা 10 epochs এবং batch_size=64 এর জন্য মডেলটি প্রশিক্ষণ করছি।

৭. মডেল মূল্যায়ন

প্রশিক্ষণের পর, মডেলের পারফরম্যান্স পরীক্ষা করতে:

# মডেল মূল্যায়ন
test_loss, test_acc = model.evaluate(X_test, y_test, verbose=2)
print(f'Test accuracy: {test_acc}')

৮. পূর্ণ কোড:

import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
import matplotlib.pyplot as plt

# CIFAR-10 ডেটাসেট লোড
(X_train, y_train), (X_test, y_test) = cifar10.load_data()

# ডেটা প্রিপ্রসেসিং
X_train = X_train / 255.0
X_test = X_test / 255.0
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)

# মডেল তৈরি
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

# মডেল কম্পাইল
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, verbose=2)
print(f'Test accuracy: {test_acc}')

সারাংশ

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

Content added By
Promotion

Are you sure to start over?

Loading...