Convolutional Neural Networks (CNN)

পাইটর্চ (Pytorch) - Machine Learning

313

Convolutional Neural Networks (CNNs) হল একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক যা মূলত চিত্র বা স্প্যাশিয়াল ডেটা প্রক্রিয়া করতে ব্যবহৃত হয়। এটি ডিপ লার্নিং এর একটি শক্তিশালী এবং জনপ্রিয় আর্কিটেকচার, যা বিশেষ করে কম্পিউটার ভিশন অ্যাপ্লিকেশনে ব্যাপকভাবে ব্যবহৃত হয়, যেমন চিত্র ক্লাসিফিকেশন, অবজেক্ট ডিটেকশন, চিত্র সেগমেন্টেশন, ইত্যাদি।

CNN এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল এর কনভোলিউশনাল লেয়ার যা ইনপুট চিত্রের স্প্যাশিয়াল (স্থানিক) তথ্য ব্যবহার করে বিশেষ বৈশিষ্ট্যগুলি (features) বের করে। এটি চিত্রের স্থানিক সম্পর্কগুলি সংরক্ষণ করে, যা প্রচলিত নিউরাল নেটওয়ার্কগুলির তুলনায় বেশি কার্যকরী।


CNN এর মৌলিক উপাদান

  1. কনভোলিউশনাল লেয়ার (Convolutional Layer):

    • কনভোলিউশনাল লেয়ার হল CNN এর প্রধান এবং সবচেয়ে গুরুত্বপূর্ণ উপাদান। এটি ইনপুট চিত্রের উপর কনভোলিউশন অপারেশন (convolution operation) প্রয়োগ করে এবং ফিচার ম্যাপ (feature map) তৈরি করে।
    • কনভোলিউশন অপারেশনটি কনভোলিউশন কোর (filter) বা কনভোলিউশনাল ফিল্টার ব্যবহার করে করা হয়, যা ইনপুট চিত্রের ছোট অংশে প্রয়োগ হয় এবং বিভিন্ন বৈশিষ্ট্য যেমন প্রান্ত, টেক্সচার, এবং রঙ চিনতে সাহায্য করে।

    কনভোলিউশন অপারেশন: কনভোলিউশন অপারেশন ইনপুট চিত্র এবং ফিল্টারের মধ্যে একটি গাণিতিক সম্পর্ক স্থাপন করে। এটি ইনপুট চিত্রের এক্স, ওয়াই এবং গভীরতার উপর নির্ভরশীল।

  2. পুলিং লেয়ার (Pooling Layer):
    • পুলিং হল একটি ডাউনসাম্পলিং প্রক্রিয়া যা ইনপুট চিত্রের সাইজ কমায় এবং ফিচারের উচ্চ-স্তরের প্রতিনিধিত্ব তৈরি করে। এতে ফিচারের গুরুত্বপূর্ণ তথ্য সংরক্ষিত থাকে এবং মডেলটি আরও কমপ্যাক্ট ও দ্রুত হয়।
    • সাধারণত ম্যাক্স পুলিং (Max Pooling) ব্যবহার করা হয়, যেখানে প্রতিটি পুলিং উইন্ডো থেকে সর্বোচ্চ মান নির্বাচন করা হয়।
  3. ফুলি কানেক্টেড লেয়ার (Fully Connected Layer):
    • শেষের দিকে, এক বা একাধিক ফুলি কানেক্টেড লেয়ার যোগ করা হয়। এই লেয়ারের উদ্দেশ্য হল CNN এর মাধ্যমে বের করা ফিচারগুলির ভিত্তিতে চূড়ান্ত আউটপুট তৈরি করা।
    • এই লেয়ারটি চিত্রের এক্সট্রাক্ট করা ফিচারগুলির উপর ভিত্তি করে চূড়ান্ত সিদ্ধান্ত নেয়।
  4. অ্যাক্টিভেশন ফাংশন (Activation Function):
    • ReLU (Rectified Linear Unit) একটি সাধারণ অ্যাক্টিভেশন ফাংশন যা CNN-এ ব্যবহৃত হয়, যা নেগেটিভ মানকে শূন্যে রূপান্তরিত করে এবং পজিটিভ মানকে অপরিবর্তিত রাখে। এটি মডেলকে দ্রুত শিখতে সাহায্য করে।
  5. ড্রপআউট (Dropout):
    • ড্রপআউট হল একটি নিয়মিতকরণ কৌশল যা মডেলের ওভারফিটিং রোধ করতে সাহায্য করে। এটি প্রতি ট্রেনিং পিরিয়ডে র‍্যান্ডমভাবে কিছু নিউরন নিষ্ক্রিয় (disable) করে দেয়, যাতে মডেলকে সাধারণীকরণের জন্য আরও বেশি প্রশিক্ষণ দেওয়া হয়।

CNN আর্কিটেকচারের একটি সাধারণ কাঠামো

  1. ইনপুট লেয়ার (Input Layer):
    • এই লেয়ারে ইনপুট চিত্রটি গ্রহণ করা হয়, সাধারণত RGB চিত্রে তিনটি চ্যানেল (রেড, গ্রীন, ব্লু) থাকে।
  2. কনভোলিউশনাল লেয়ার:
    • এই লেয়ারটি ইনপুট চিত্রের উপর কনভোলিউশন অপারেশন প্রয়োগ করে এবং ফিচার ম্যাপ তৈরি করে। এটি চিত্রের স্থানিক সম্পর্ক সনাক্ত করে।
  3. পুলিং লেয়ার:
    • পুলিং অপারেশন ইনপুট চিত্রের সাইজ কমিয়ে ফিচারগুলির সংক্ষেপিত প্রতিনিধিত্ব তৈরি করে।
  4. ফুলি কানেক্টেড লেয়ার:
    • এই লেয়ারে বের করা ফিচারগুলির ওপর ভিত্তি করে আউটপুট তৈরি করা হয় (যেমন, শ্রেণীভুক্তি প্রক্রিয়া)।
  5. আউটপুট লেয়ার:
    • আউটপুট লেয়ারটি মডেলের চূড়ান্ত সিদ্ধান্ত নেয়, যেমন কোন ক্লাসের অন্তর্ভুক্ত চিত্র।

CNN এর উদাহরণ

একটি সাধারণ 2D কনভোলিউশনাল নিউরাল নেটওয়ার্ক (যেমন, চিত্র ক্লাসিফিকেশন) তৈরি করার জন্য নিচের কোডটি ব্যবহার করা হতে পারে:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# CNN মডেল তৈরি
class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        # কনভোলিউশনাল লেয়ার 1
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)  # ইনপুট: 1 চ্যানেল, আউটপুট: 32 চ্যানেল
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)  # ম্যাক্স পুলিং
        # কনভোলিউশনাল লেয়ার 2
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)  # 32 চ্যানেল ইনপুট থেকে 64 চ্যানেল আউটপুট
        # ফুলি কানেক্টেড লেয়ার
        self.fc1 = nn.Linear(64 * 7 * 7, 128)  # 7x7 সাইজের ফিচার ম্যাপ
        self.fc2 = nn.Linear(128, 10)  # 10 ক্লাস আউটপুট

    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x)))  # কনভোলিউশন + ReLU + পুলিং
        x = self.pool(torch.relu(self.conv2(x)))  # কনভোলিউশন + ReLU + পুলিং
        x = x.view(-1, 64 * 7 * 7)  # ফ্ল্যাটিং
        x = torch.relu(self.fc1(x))  # ফুলি কানেক্টেড লেয়ার 1
        x = self.fc2(x)  # ফুলি কানেক্টেড লেয়ার 2
        return x

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

# লস ফাংশন এবং অপটিমাইজার
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# ডেটা লোডার
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)

# মডেল ট্রেনিং
num_epochs = 5
for epoch in range(num_epochs):
    running_loss = 0.0
    for data, target in train_loader:
        optimizer.zero_grad()  # গ্র্যাডিয়েন্ট শূন্য করা
        output = model(data)  # আউটপুট তৈরি করা
        loss = criterion(output, target)  # লস ক্যালকুলেশন
        loss.backward()  # ব্যাকপ্রোপাগেশন
        optimizer.step()  # ওজন আপডেট

        running_loss += loss.item()
    print(f"Epoch {epoch+1}/{num_epochs}, Loss: {running_loss/len(train_loader)}")

CNN এর সুবিধা

  1. অটোফিচার এক্সট্রাকশন: CNN ইনপুট চিত্রের অটোফিচার এক্সট্রাকশন করতে সক্ষম, অর্থাৎ কনভোলিউশনাল লেয়ার গুলি নিজেই গুরুত্বপূর্ণ বৈশিষ্ট্য বের করে।
  2. স্প্যাশিয়াল ইনভ্যারিয়েন্ট: এটি ইনপুট চিত্রের স্থানিক সম্পর্ক সংরক্ষণ করে এবং গুণগত বৈশিষ্ট্যগুলো সঠিকভাবে চিহ্নিত করে, যেমন প্রান্ত, টেক্সচার, এবং আকৃতি।
  3. অপটিমাইজড ট্রেনিং: CNN ট্রেনিং পদ্ধতি GPU তে দ্রুত রান করে এবং মেমরি ব্যবহারে দক্ষ।

সারাংশ

**Con

volutional Neural Networks (CNNs)** একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক যা প্রধানত কম্পিউটার ভিশন এবং স্প্যাশিয়াল ডেটা প্রক্রিয়া করতে ব্যবহৃত হয়। এটি কনভোলিউশনাল লেয়ার, পুলিং লেয়ার, এবং ফুলি কানেক্টেড লেয়ার সহ একটি ধাপে ধাপে গঠিত আর্কিটেকচার। CNN মডেলগুলি ফিচার এক্সট্রাকশন এবং ক্লাসিফিকেশন এর জন্য অত্যন্ত শক্তিশালী এবং কার্যকরী।

Content added By

CNN এর ভূমিকা এবং গঠন

464

Convolutional Neural Network (CNN) হল একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক, যা প্রধানত চিত্র প্রসেসিং, চিত্র শ্রেণীবিভাগ, বস্তুর শনাক্তকরণ, এবং ভিজ্যুয়াল ডেটা বিশ্লেষণ এর জন্য ব্যবহৃত হয়। CNN এর গঠন এবং কাজের প্রক্রিয়া মানুষের মস্তিষ্কের ভিজ্যুয়াল সিস্টেমের অনুকরণে তৈরি করা হয়েছে। এটি ফিচার এক্সট্র্যাকশন এবং ডেটা প্রক্রিয়া করার জন্য অত্যন্ত কার্যকরী।

CNN সাধারণত সাধারণ নিউরাল নেটওয়ার্কের তুলনায় আরো কার্যকরী, কারণ এটি ইনপুট চিত্রের স্থানীয় গঠন (local structure) সংরক্ষণ করতে সক্ষম এবং এটির জন্য অনেক কম প্যারামিটার প্রয়োজন হয়।


CNN এর ভূমিকা

  1. চিত্র প্রক্রিয়াকরণ: CNN প্রধানত চিত্র বা ভিজ্যুয়াল ডেটা প্রক্রিয়া করতে ব্যবহৃত হয়। এটি চিত্রের বিভিন্ন ফিচার (features) যেমন রেখা, কোণ, আকার, এবং আরো জটিল প্যাটার্ন শনাক্ত করতে সাহায্য করে।
  2. ফিচার এক্সট্র্যাকশন: CNN একটি অটোমেটেড ফিচার এক্সট্রাকশন মেথড ব্যবহার করে। এর মাধ্যমে, এটি ইনপুট চিত্র থেকে বেসিক ফিচার যেমন কোণ (edges), টেক্সচার, এবং পরে উচ্চ স্তরের ফিচার যেমন মুখ, গাড়ি বা অন্য কোন বস্তুর অংশ বের করে।
  3. চিত্র শ্রেণীবিভাগ: CNN ব্যবহৃত হয় চিত্র শ্রেণীবিভাগ (Image Classification) এর জন্য, যেখানে এটি একটি চিত্রকে বিভিন্ন শ্রেণিতে (যেমন, ক্যাট, ডগ, গাড়ি ইত্যাদি) শ্রেণীবদ্ধ করে।
  4. বস্তুর শনাক্তকরণ (Object Detection): CNN ব্যবহার করা হয় বস্তুর শনাক্তকরণ (Object Detection) এর জন্য, যেমন চিত্রে একটি নির্দিষ্ট বস্তুকে খুঁজে বের করা (যেমন, গাড়ি, মানুষ) এবং তাদের অবস্থান চিহ্নিত করা।
  5. সিকুয়েন্স ডেটা এবং ভিডিও বিশ্লেষণ: CNN কেবল চিত্রই নয়, ভিডিও এবং সিকুয়েন্সাল ডেটা বিশ্লেষণের জন্যও ব্যবহৃত হয়। ভিডিও ফ্রেমের মধ্যে স্থানীয় প্যাটার্ন এবং সময়কালীন প্যাটার্ন খুঁজে বের করতে CNN সহায়ক।

CNN এর গঠন

CNN একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক, যা সাধারণত চারটি প্রধান স্তর নিয়ে গঠিত:

১. কনভোলিউশনাল লেয়ার (Convolutional Layer)

  • কনভোলিউশন (Convolution) হল একটি গণনা যেখানে একটি ছোট ফিল্টার (কোনও কর্নেল) একটি ইনপুট চিত্রের উপর স্লাইডিং করে এবং একটি নতুন ম্যাট্রিক্স বা চিত্র তৈরি করে।
  • এই স্তরের লক্ষ্য হল চিত্রের স্থানীয় ফিচারগুলো যেমন কোণ, রেখা, টেক্সচার ইত্যাদি শিখে নেওয়া।
  • কনভোলিউশন অপারেশনটি ফিল্টার (বা কর্নেল) ব্যবহার করে ইনপুট চিত্রের উপর কাজ করে এবং আউটপুট হিসেবে একটি নতুন ফিচার ম্যাপ তৈরি করে।

২. অ্যাক্টিভেশন ফাংশন (Activation Function)

  • কনভোলিউশনাল স্তরের পর, সাধারণত একটি ReLU (Rectified Linear Unit) ফাংশন ব্যবহার করা হয়।
  • ReLU একটি অ-লিনিয়ার ফাংশন, যা পজিটিভ আউটপুট বজায় রাখে এবং নেতিবাচক আউটপুটকে শূন্য করে ফেলে। এটি মডেলকে দ্রুত শিখতে এবং অপ্টিমাইজ করতে সাহায্য করে।

৩. পুলিং লেয়ার (Pooling Layer)

  • পুলিং একটি অপারেশন যা আউটপুট চিত্রের মাত্রা (ডাইমেনশন) কমিয়ে আনে, তবে গুরুত্বপূর্ণ ফিচারগুলো সংরক্ষণ করে।
  • সাধারণত ম্যাক্স পুলিং (Max Pooling) বা এভারেজ পুলিং (Average Pooling) ব্যবহার করা হয়, যেখানে একটি ছোট অঞ্চলের মধ্যে সর্বোচ্চ (বা গড়) মানটি বেছে নেওয়া হয়।
  • পুলিং অপারেশনটি চিত্রের স্পেসিয়াল রেজোলিউশন কমিয়ে আনে এবং এতে গণনা দ্রুত হয়, তবে ফিচারগুলো সংরক্ষিত থাকে।

৪. ফুলি কানেক্টেড লেয়ার (Fully Connected Layer)

  • ফুলি কানেক্টেড লেয়ার (FC Layer) নিউরাল নেটওয়ার্কের শেষ অংশ। এটি মূলত একটি সাধারণ নিউরাল নেটওয়ার্ক লেয়ার যেখানে সমস্ত ইনপুট থেকে সমস্ত আউটপুট নোডের সাথে সংযোগ থাকে।
  • পুলিং এবং কনভোলিউশনাল স্তরের মাধ্যমে পাওয়া ফিচারগুলো এই স্তরে আউটপুট আকারে রূপান্তরিত হয়। এটি শ্রেণীবিভাগ বা প্রেডিকশন তৈরি করতে ব্যবহৃত হয়।

৫. সফটম্যাক্স লেয়ার (Softmax Layer)

  • আউটপুট স্তরে, Softmax ফাংশনটি ব্যবহৃত হয়। এটি শ্রেণীবিন্যাসের ক্ষেত্রে, চিত্রের প্রেডিক্টেড ক্লাসের সম্ভাবনা বের করে এবং সবচেয়ে সম্ভাব্য শ্রেণি চিহ্নিত করে।

CNN এর উদাহরণ

ধরা যাক, আমাদের একটি চিত্র আছে এবং আমরা চাই এটি শ্রেণীবদ্ধ করতে। CNN এর কাজ হবে:

  1. কনভোলিউশনাল স্তর চিত্রের স্থানীয় ফিচার যেমন কোণ এবং রেখা চিহ্নিত করবে।
  2. পুলিং স্তর চিত্রের আকার ছোট করবে এবং গুরুত্বপূর্ণ তথ্য সংরক্ষণ করবে।
  3. ফিচার ম্যাপগুলো ফুলি কানেক্টেড স্তরের মাধ্যমে শ্রেণীসমূহে রূপান্তরিত হবে।
  4. অবশেষে, সফটম্যাক্স লেয়ারটি শ্রেণীসমূহের মধ্যে সবচেয়ে সম্ভাব্য একটি শ্রেণী চিহ্নিত করবে।

সারাংশ

Convolutional Neural Network (CNN) হল চিত্র এবং ভিজ্যুয়াল ডেটা প্রক্রিয়া করার জন্য বিশেষভাবে ডিজাইন করা একটি নিউরাল নেটওয়ার্ক। এটি কনভোলিউশনাল স্তর, অ্যাক্টিভেশন ফাংশন, পুলিং লেয়ার, এবং ফুলি কানেক্টেড লেয়ার দ্বারা গঠিত। CNN চিত্রের স্থানীয় ফিচার এক্সট্র্যাক্ট করতে সাহায্য করে এবং বিভিন্ন প্রক্রিয়া ও স্তরের মাধ্যমে চিত্র শ্রেণীবিভাগ, বস্তুর শনাক্তকরণ, এবং অন্যান্য ভিজ্যুয়াল অ্যানালাইসিস কাজগুলো সম্পাদন করে।

Content added By

Convolutional এবং Pooling Layers

349

Convolutional Layers এবং Pooling Layers ডিপ লার্নিংয়ের বিশেষ ধরনের লেয়ার, যা প্রধানত Convolutional Neural Networks (CNNs)-এ ব্যবহৃত হয়। এগুলি বিশেষভাবে চিত্র প্রক্রিয়াকরণ এবং কম্পিউটার ভিশন সমস্যা সমাধানে ব্যবহৃত হয়। নিচে এই লেয়ারগুলির কাজ, গুরুত্ব এবং উদাহরণ আলোচনা করা হলো।


১. Convolutional Layer

Convolutional Layer হল একটি নিউরাল নেটওয়ার্ক লেয়ার যা ইনপুট (যেমন, চিত্র) থেকে বৈশিষ্ট্য (features) বের করার জন্য কনভোলিউশন অপারেশন ব্যবহার করে। এটি এক ধরনের ফিল্টার (filter) বা কন্নেকশন ওয়েটস (connection weights) ব্যবহার করে ইনপুট ডেটাকে স্ক্যান করে এবং আউটপুট হিসেবে ফিচার ম্যাপ (feature map) বা অ্যাক্টিভেশন ম্যাপ (activation map) তৈরি করে।

কনভোলিউশন অপারেশন কী?

কনভোলিউশন অপারেশনটি মূলত একটি ফিল্টার বা কনভোলিউশন কনভেক্ট (convolution kernel) ব্যবহার করে ইনপুট ডেটার উপর গাণিতিক অপারেশন সম্পন্ন করে। এই ফিল্টারটি ছোট ছোট অংশে ইনপুট ডেটাকে স্ক্যান করে এবং সংশ্লিষ্ট সেগমেন্টের জন্য একটি নতুন ভ্যালু তৈরি করে।

  • ইনপুট: সাধারণত একটি চিত্র বা মাল্টি-ডাইমেনশনাল টেনসর (যেমন, 3 চ্যানেল RGB চিত্র)।
  • ফিল্টার (Kernel): একটি ছোট আকারের ম্যাট্রিক্স (যেমন, 3x3 বা 5x5) যা ইনপুট ডেটার উপর স্লাইড করে।

কনভোলিউশন লেয়ারের কাজ:

  1. ফিল্টার স্ক্যান: ইনপুট ডেটার ওপর ফিল্টার বা কনভোলিউশন কনভেক্ট স্ক্যান করে।
  2. ওজন যোগফল: ইনপুট ডেটার প্রতিটি সেগমেন্টে ফিল্টারের উপাদানগুলোর সাথে গুণফল করে এবং একটি আউটপুট তৈরি হয়।
  3. ফিচার ম্যাপ তৈরি: প্রতিটি ফিল্টার আউটপুটের সাথে একটি নতুন ফিচার ম্যাপ তৈরি করা হয়।

উদাহরণ:

import torch
import torch.nn as nn

# একটি কনভোলিউশনাল লেয়ার উদাহরণ
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)

# একটি উদাহরণ ইনপুট (3 চ্যানেল, 32x32 ইমেজ)
input_image = torch.randn(1, 3, 32, 32)

# কনভোলিউশনাল লেয়ার ব্যবহার
output = conv_layer(input_image)
print(output.shape)

এখানে:

  • in_channels=3: ইনপুট চ্যানেল সংখ্যা (যেমন RGB চিত্রে ৩টি চ্যানেল),
  • out_channels=16: আউটপুট চ্যানেল সংখ্যা (ফিল্টারের সংখ্যা),
  • kernel_size=3: ফিল্টারের আকার (3x3),
  • stride=1: ফিল্টারের স্ক্যান করার গতি,
  • padding=1: ইনপুট ডেটার সীমানার কাছাকাছি ফিল্টার প্রয়োগের জন্য প্যাডিং যোগ করা।

২. Pooling Layer

Pooling Layer হল একটি ডাউনস্যাম্পলিং লেয়ার যা ইনপুট চিত্রের আকার ছোট করে, তবে মুল বৈশিষ্ট্যগুলি বজায় রাখে। এই লেয়ারটি max pooling বা average pooling ব্যবহার করে ইনপুট ডেটাকে সামান্য সংকুচিত করে এবং একটি সারাংশ তৈরি করে, যা মডেলকে কম্পিউটেশনাল দক্ষতা বাড়াতে সাহায্য করে।

Pooling অপারেশন কী?

Pooling অপারেশন মূলত একটি নির্দিষ্ট আকারের উইন্ডো ব্যবহার করে ইনপুট ডেটা স্ক্যান করে এবং প্রতি উইন্ডোর জন্য একটি মান বের করে। দুইটি প্রধান ধরনের পুলিং:

  1. Max Pooling: প্রতিটি পুলিং উইন্ডোর মধ্যে সর্বোচ্চ মান (maximum value) গ্রহণ করা হয়।
  2. Average Pooling: প্রতিটি পুলিং উইন্ডোর মধ্যে গড় মান (average value) গ্রহণ করা হয়।

Pooling Layer এর কাজ:

  1. পুলিং উইন্ডো: একটি ছোট উইন্ডো (যেমন 2x2 বা 3x3) ইনপুট ডেটাতে স্লাইড করে।
  2. ফিচার রিডিউস: উইন্ডোটি চলার সময়, নির্দিষ্ট অপারেশন (Max বা Average) প্রয়োগ করা হয় এবং নতুন আউটপুট তৈরি হয়।
  3. ডাউনস্যাম্পলিং: আউটপুটের আকার ইনপুটের তুলনায় ছোট হয়, তবে মুল বৈশিষ্ট্যগুলি বজায় থাকে।

উদাহরণ:

import torch
import torch.nn as nn

# একটি পুলিং লেয়ার উদাহরণ (Max Pooling)
pool_layer = nn.MaxPool2d(kernel_size=2, stride=2)

# একটি উদাহরণ ইনপুট (1 চ্যানেল, 4x4 চিত্র)
input_image = torch.randn(1, 1, 4, 4)

# পুলিং লেয়ার ব্যবহার
output = pool_layer(input_image)
print(output.shape)

এখানে:

  • kernel_size=2: পুলিং উইন্ডোর আকার (2x2),
  • stride=2: পুলিং উইন্ডোর গতি।

৩. Convolutional এবং Pooling Layers এর ভূমিকা

  • Convolutional Layer: ইনপুট চিত্র থেকে গুরুত্বপূর্ণ বৈশিষ্ট্যগুলি বের করার জন্য ব্যবহৃত হয়, যেমন প্রান্ত (edges), টেক্সচার (textures), এবং অন্যান্য আকৃতি। এটি বিভিন্ন ফিচার ম্যাপ তৈরি করতে সহায়ক।
  • Pooling Layer: ইনপুট চিত্রের আকার কমিয়ে ফিচার সিলেকশন এবং ডাউনস্যাম্পলিংয়ের মাধ্যমে গাণিতিক হিসাব কমিয়ে আনে। এতে মডেল দ্রুত এবং দক্ষভাবে কাজ করতে পারে।

সারাংশ

Convolutional Layers চিত্র বা ডেটার গুরুত্বপূর্ণ বৈশিষ্ট্য বের করতে সহায়ক, এবং Pooling Layers আউটপুট ডেটার আকার ছোট করে এবং মূল বৈশিষ্ট্যগুলি রক্ষা করে। এগুলি মিলে একত্রে কাজ করে Convolutional Neural Networks (CNNs) তৈরি করতে, যা চিত্র সনাক্তকরণ, অবজেক্ট ডিটেকশন, ভাষা প্রক্রিয়াকরণ, এবং আরও অনেক ক্ষেত্রে ব্যবহৃত হয়।

Content added By

PyTorch দিয়ে CNN তৈরি

271

Convolutional Neural Network (CNN) হল একটি ডিপ লার্নিং মডেল যা বিশেষভাবে চিত্র শনাক্তকরণ, ভিডিও বিশ্লেষণ, এবং অন্যান্য ভিজ্যুয়াল ডেটা প্রসেসিং কাজে ব্যবহৃত হয়। CNN মডেল সাধারণত Convolutional Layer, Pooling Layer, এবং Fully Connected Layer নিয়ে গঠিত। PyTorch দিয়ে CNN তৈরি করা একটি সহজ প্রক্রিয়া যা নিম্নলিখিত স্টেপে বাস্তবায়িত করা যেতে পারে।

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

আপনার সিস্টেমে PyTorch এবং TorchVision ইনস্টল করা থাকতে হবে। যদি না থাকে, তাহলে এই কমান্ড দিয়ে ইনস্টল করতে পারেন:

pip install torch torchvision

২. CNN আর্কিটেকচার তৈরি করা

এখানে একটি সাধারণ CNN আর্কিটেকচার তৈরি করার উদাহরণ দেওয়া হলো:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

# CNN মডেল তৈরি
class CNNModel(nn.Module):
    def __init__(self):
        super(CNNModel, self).__init__()
        
        # প্রথম কনভোলিউশনাল লেয়ার
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1)
        self.relu1 = nn.ReLU()
        self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
        
        # দ্বিতীয় কনভোলিউশনাল লেয়ার
        self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, padding=1)
        self.relu2 = nn.ReLU()
        self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
        
        # তৃতীয় কনভোলিউশনাল লেয়ার
        self.conv3 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=1)
        self.relu3 = nn.ReLU()
        self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
        
        # ফ্ল্যাটিং
        self.fc1 = nn.Linear(128 * 3 * 3, 512)
        self.fc2 = nn.Linear(512, 10)  # আউটপুট 10টি ক্লাসের জন্য

    def forward(self, x):
        # ফিডফরোয়ার্ড পাস
        x = self.pool1(self.relu1(self.conv1(x)))
        x = self.pool2(self.relu2(self.conv2(x)))
        x = self.pool3(self.relu3(self.conv3(x)))
        
        # ফ্ল্যাটিং
        x = x.view(-1, 128 * 3 * 3)
        
        # পূর্ণসংখ্যার লেয়ার
        x = self.fc1(x)
        x = self.fc2(x)
        return x

# মডেল তৈরি
model = CNNModel()
print(model)

৩. ডেটা লোডিং এবং প্রিপ্রসেসিং

এখানে MNIST ডেটাসেট ব্যবহার করা হয়েছে, যা 28x28 পিক্সেল সাদা-কালো চিত্রের ডেটাসেট। PyTorch এর torchvision লাইব্রেরি দিয়ে আমরা ডেটা লোড এবং প্রিপ্রসেসিং করতে পারি।

# ডেটা ট্রান্সফরমেশন (নর্মালাইজেশন)
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))  # গড় এবং স্ট্যান্ডার্ড ডেভিয়েশন অনুযায়ী নর্মালাইজেশন
])

# MNIST ডেটাসেট লোড করা
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)

# ডেটা লোডার
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

৪. মডেল ট্রেনিং এবং টেস্টিং

এখন, মডেলটি ট্রেনিং করার জন্য এবং পরবর্তীতে টেস্টিং করার জন্য নিম্নলিখিত কোড ব্যবহার করা হবে।

# হার্ডওয়্যার নির্বাচন
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# লস ফাংশন এবং অপটিমাইজার
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# মডেল ট্রেনিং
def train_model():
    model.train()
    for epoch in range(5):  # 5টি Epoch
        running_loss = 0.0
        for images, labels in train_loader:
            images, labels = images.to(device), labels.to(device)
            
            # গ্রেডিয়েন্টগুলি জিরো করুন
            optimizer.zero_grad()
            
            # ফরওয়ার্ড পাস
            outputs = model(images)
            loss = criterion(outputs, labels)
            
            # ব্যাকপ্রোপাগেশন
            loss.backward()
            
            # অপটিমাইজার দ্বারা ওজন আপডেট
            optimizer.step()
            
            running_loss += loss.item()
        
        print(f"Epoch [{epoch+1}/5], Loss: {running_loss/len(train_loader)}")

# মডেল টেস্টিং
def test_model():
    model.eval()  # মডেলটি eval মোডে এনে রাখুন
    correct = 0
    total = 0
    with torch.no_grad():
        for images, labels in test_loader:
            images, labels = images.to(device), labels.to(device)
            outputs = model(images)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
    print(f"Accuracy on test set: {100 * correct / total}%")

# মডেল ট্রেনিং এবং টেস্টিং
train_model()
test_model()

৫. মডেল সেভ এবং লোড করা

আপনি মডেলটি সেভ করতে এবং পরবর্তীতে লোড করতে পারেন:

# মডেল সেভ করা
torch.save(model.state_dict(), 'cnn_model.pth')

# মডেল লোড করা
model = CNNModel()
model.load_state_dict(torch.load('cnn_model.pth'))
model.eval()

সারাংশ

এটি ছিল একটি সহজ CNN মডেল তৈরি করার প্রক্রিয়া PyTorch দিয়ে। Convolutional Layers (যেমন Conv2d) ব্যবহার করে মডেলটি ইমেজ ফিচার এক্সট্র্যাক্ট করতে পারে এবং MaxPooling ব্যবহার করে ডাউনস্যাম্পলিং করা হয়। এরপর Fully Connected Layers ব্যবহার করে চূড়ান্ত ক্লাসিফিকেশন করা হয়। PyTorch এর nn.Module ক্লাসের মাধ্যমে CNN আর্কিটেকচার নির্মাণের প্রক্রিয়া খুবই নমনীয় এবং কাস্টমাইজযোগ্য।

Content added By

Image Classification প্রজেক্ট উদাহরণ

296

Image Classification হল একটি ডিপ লার্নিং কাজ যেখানে একটি মডেল বা এলগরিদম একটি চিত্রের ভিত্তিতে এটি কোন শ্রেণীতে (class) অন্তর্ভুক্ত তা চিহ্নিত করে। উদাহরণস্বরূপ, একটি মডেল বিভিন্ন প্রাণীর ছবি দেখে প্রতিটি ছবির মধ্যে কুকুর, বিড়াল বা অন্য কোন প্রাণী আছে কি না তা নির্ধারণ করতে পারে।

এখানে একটি সাধারণ Image Classification প্রজেক্টের উদাহরণ দেওয়া হয়েছে, যেখানে PyTorch ব্যবহার করে একটি মডেল তৈরি করা হবে যা CIFAR-10 ডেটাসেট থেকে ছবির শ্রেণী চিহ্নিত করবে।


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

প্রথমে, PyTorch, torchvision এবং অন্যান্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে:

pip install torch torchvision matplotlib

২. CIFAR-10 ডেটাসেট লোড করা

CIFAR-10 একটি ছোট ডেটাসেট যা ১০টি বিভিন্ন শ্রেণীর ৬০,০০০ ছবি নিয়ে গঠিত। প্রতিটি শ্রেণীতে ৬,০০০ ছবি থাকে এবং ডেটাসেটটি ৫০,০০০ ট্রেনিং এবং ১০,০০০ টেস্ট ছবি নিয়ে তৈরি।

import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt

# ডেটাসেট ট্রান্সফর্মেশন সেটআপ
transform = transforms.Compose(
    [transforms.ToTensor(),  # চিত্রকে টেনসরে রূপান্তরিত করা
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])  # নরমালাইজেশন

# CIFAR-10 ডেটাসেট লোড করা
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
                                         shuffle=False, num_workers=2)

৩. ক্লাস লেবেল (Classes) ডিফাইন করা

CIFAR-10 ডেটাসেট ১০টি শ্রেণীতে ছবি বিভক্ত। এগুলি হল:

classes = ('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

৪. নিউরাল নেটওয়ার্ক মডেল তৈরি করা

এখন আমরা একটি সোজা Convolutional Neural Network (CNN) মডেল তৈরি করব যা CIFAR-10 ডেটাসেটের ছবি শ্রেণীবদ্ধ করবে।

import torch.nn as nn
import torch.optim as optim

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # কনভোলিউশনাল লেয়ার 1
        self.conv1 = nn.Conv2d(3, 6, 5)
        # কনভোলিউশনাল লেয়ার 2
        self.conv2 = nn.Conv2d(6, 16, 5)
        # ফুলি কানেক্টেড লেয়ার 1
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        # ফুলি কানেক্টেড লেয়ার 2
        self.fc2 = nn.Linear(120, 84)
        # আউটপুট লেয়ার
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = torch.relu(self.conv1(x))  # কনভোলিউশনাল লেয়ার 1
        x = torch.max_pool2d(x, 2, 2)  # পুলিং
        x = torch.relu(self.conv2(x))  # কনভোলিউশনাল লেয়ার 2
        x = torch.max_pool2d(x, 2, 2)  # পুলিং
        x = x.view(-1, 16 * 5 * 5)  # ফ্ল্যাটিং
        x = torch.relu(self.fc1(x))  # ফুলি কানেক্টেড লেয়ার 1
        x = torch.relu(self.fc2(x))  # ফুলি কানেক্টেড লেয়ার 2
        x = self.fc3(x)  # আউটপুট লেয়ার
        return x

# মডেল ইনস্ট্যান্স তৈরি
net = Net()

৫. লস ফাংশন এবং অপটিমাইজার সেটআপ

এখন, আমরা CrossEntropyLoss লস ফাংশন এবং SGD (Stochastic Gradient Descent) অপটিমাইজার ব্যবহার করব:

# লস ফাংশন এবং অপটিমাইজার
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

৬. মডেল ট্রেনিং

এখন আমরা মডেলটি ট্রেনিং শুরু করব:

# মডেল ট্রেনিং
for epoch in range(2):  # 2 ইপোকের জন্য ট্রেনিং
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        # ডেটা লোড করা
        inputs, labels = data

        # গ্রেডিয়েন্টস্ শূন্য করা
        optimizer.zero_grad()

        # ফরওয়ার্ড + ব্যাকওয়ার্ড + অপটিমাইজেশন
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # পরবর্তী ২০০০ ব্যাচের পর লোকস দেখানো
        running_loss += loss.item()
        if i % 2000 == 1999:  # প্রতি ২০০০ ব্যাচে লোকস দেখানো
            print(f"[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 2000:.3f}")
            running_loss = 0.0

print('Finished Training')

৭. মডেল পরীক্ষা করা

টেস্ট ডেটাসেটে মডেলের পারফরম্যান্স পরীক্ষা করা:

# টেস্ট সেটের উপর মডেল পরীক্ষা করা
correct = 0
total = 0
with torch.no_grad():  # গ্র্যাডিয়েন্ট হিসাব না করা
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f'Accuracy of the network on the 10000 test images: {100 * correct / total}%')

৮. ফলাফল প্রদর্শন করা

প্রতিটি শ্রেণীর জন্য সঠিকতা চেক করতে:

# ক্লাস অনুযায়ী সঠিকতা
class_correct = [0] * 10
class_total = [0] * 10
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs, 1)
        c = (predicted == labels).squeeze()
        for i in range(4):  # ব্যাচের সাইজ ৪
            label = labels[i]
            class_correct[label] += c[i].item()
            class_total[label] += 1

for i in range(10):
    print(f'Accuracy of {classes[i]}: {100 * class_correct[i] / class_total[i]}%')

সারাংশ

এই প্রজেক্টে আমরা PyTorch ব্যবহার করে CIFAR-10 ডেটাসেট থেকে একটি Image Classification মডেল তৈরি করেছি। এতে:

  1. ডেটাসেট লোডিং এবং ট্রান্সফরমেশন,
  2. একটি Convolutional Neural Network (CNN) মডেল তৈরি,
  3. ফিডফরোয়ার্ড, ব্যাকপ্রোপাগেশন এবং অপটিমাইজেশন প্রক্রিয়া,
  4. মডেল ট্রেনিং এবং পরীক্ষার জন্য কোড করা হয়েছে।

এই ধরনের প্রকল্পে আপনি নতুন ইমেজ ডেটাসেট ব্যবহার করে আরও উন্নত মডেল তৈরি করতে পারেন এবং মডেলের পারফরম্যান্স উন্নত করতে বিভিন্ন কৌশল প্রয়োগ করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...