Convolutional Neural Network (CNN) ব্যবহার করে Image Classification প্রজেক্ট তৈরি করা একটি চমৎকার প্র্যাকটিস প্রজেক্ট। এই প্রজেক্টে আমরা কুকুর এবং বিড়াল চিহ্নিত করতে একটি CNN মডেল তৈরি করব।
ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
pip install tensorflow numpy matplotlib
ধাপ ২: ডেটাসেট লোড করা
আপনি Kaggle বা Microsoft-এর Cats vs. Dogs ডেটাসেট ব্যবহার করতে পারেন। ডেটাসেটটি ডাউনলোড করে train এবং validation ফোল্ডারে বিভক্ত করুন।
ফোল্ডার স্ট্রাকচার:
data/
train/
cats/
cat1.jpg
cat2.jpg
...
dogs/
dog1.jpg
dog2.jpg
...
validation/
cats/
dogs/
ধাপ ৩: প্রয়োজনীয় লাইব্রেরি এবং ডেটা লোড করা
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
ধাপ ৪: ডেটা প্রি-প্রসেসিং এবং অগমেন্টেশন
ImageDataGenerator ব্যবহার করে ইমেজগুলোকে নরমালাইজ করা এবং ট্রেনিং ডেটাতে কিছু অগমেন্টেশন করা হবে।
# ডেটা অগমেন্টেশন
train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
# ভ্যালিডেশন ডেটা
validation_datagen = ImageDataGenerator(rescale=1./255)
# ডেটা লোড করা
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)
validation_generator = validation_datagen.flow_from_directory(
'data/validation',
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)
ধাপ ৫: CNN মডেল তৈরি করা
CNN মডেলে Convolutional এবং MaxPooling লেয়ার ব্যবহার করে একটি সিম্পল আর্কিটেকচার তৈরি করা।
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
MaxPooling2D(2, 2),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(2, 2),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(2, 2),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(2, 2),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.5),
Dense(1, activation='sigmoid')
])
model.summary()
ধাপ ৬: মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
ধাপ ৭: মডেল Training করা
history = model.fit(
train_generator,
steps_per_epoch=100,
epochs=20,
validation_data=validation_generator,
validation_steps=50
)
ধাপ ৮: মডেল Performance মূল্যায়ন
Training এবং Validation accuracy এবং loss এর পরিবর্তন দেখতে গ্রাফ আঁকা হবে।
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'b', label='Training accuracy')
plt.plot(epochs, val_acc, 'r', label='Validation accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()
plt.show()
plt.plot(epochs, loss, 'b', label='Training loss')
plt.plot(epochs, val_loss, 'r', label='Validation loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()
ধাপ ৯: মডেল সংরক্ষণ করা
model.save("cats_vs_dogs_classifier.h5")
ধাপ ১০: নতুন ইমেজে পূর্বাভাস করা
মডেলটি নতুন ইমেজে পূর্বাভাস দিতে লোড করে ব্যবহার করা যেতে পারে।
from tensorflow.keras.preprocessing import image
import numpy as np
# মডেল লোড করা
model = tf.keras.models.load_model("cats_vs_dogs_classifier.h5")
# নতুন ইমেজ লোড করা এবং প্রি-প্রসেসিং
img = image.load_img('data/test/cat1.jpg', target_size=(150, 150))
img_array = image.img_to_array(img) / 255.0
img_array = np.expand_dims(img_array, axis=0)
# পূর্বাভাস
prediction = model.predict(img_array)
if prediction[0][0] > 0.5:
print("It's a Dog!")
else:
print("It's a Cat!")
সারসংক্ষেপ
- ডেটা প্রি-প্রসেসিং ও অগমেন্টেশন: ImageDataGenerator ব্যবহার।
- CNN মডেল তৈরি: Conv2D, MaxPooling, এবং Dropout লেয়ার।
- মডেল Training: মডেল প্রশিক্ষণ ও মূল্যায়ন।
- মডেল সংরক্ষণ ও পূর্বাভাস:
.h5ফরম্যাটে সংরক্ষণ এবং নতুন ইমেজে পূর্বাভাস।
এই প্রজেক্টটি Image Classification-এ প্রাথমিক দক্ষতা অর্জনের জন্য উপযোগী।
Read more