Theano দিয়ে CNN মডেল তৈরি

Convolutional Neural Networks (CNN) - থিয়ানো (Theano) - Machine Learning

301

থিয়ানো (Theano) দিয়ে একটি কনভোলিউশনাল নিউরাল নেটওয়ার্ক (CNN) মডেল তৈরি করার জন্য বেশ কিছু ধাপ অনুসরণ করতে হবে। CNN সাধারণত চিত্র (image) বা ভিডিও (video) বিশ্লেষণে ব্যবহৃত হয় এবং থিয়ানোকে এর জন্য ব্যবহার করা যেতে পারে। এখানে একটি সাধারণ CNN মডেল তৈরি করার প্রক্রিয়া দেয়া হলো, যা ফিচার এক্সট্র্যাকশন, পুলিং এবং ক্লাসিফিকেশন পর্যায়ে কাজ করবে।

Theano দিয়ে CNN মডেল তৈরি করার জন্য ধাপগুলো:

ধাপ ১: থিয়ানো ইনস্টলেশন এবং প্রয়োজনীয় প্যাকেজ

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

pip install theano numpy scipy

ধাপ ২: থিয়ানো টেনসর এবং কনভোলিউশনাল লেয়ার ডিফাইন করা

এখানে একটি সিম্পল CNN মডেল তৈরি করার জন্য, আমরা কনভোলিউশনাল লেয়ার, পুলিং লেয়ার এবং ফুলি কানেক্টেড লেয়ার ডিফাইন করব।

import numpy as np
import theano
import theano.tensor as T
from theano.tensor.nnet import conv
from theano.tensor.signal import pool

# ইনপুট টেনসর
X = T.tensor4('X')  # Input images (batch_size, num_channels, height, width)
Y = T.ivector('Y')  # Labels (batch_size,)

# কনভোলিউশনাল লেয়ার ডিফাইন করা
def conv_layer(input, filter_shape, image_shape):
    filters = theano.shared(np.random.randn(*filter_shape).astype(np.float32), name='filters')
    conv_out = conv.conv2d(input=input, filters=filters, filter_shape=filter_shape, image_shape=image_shape)
    return conv_out

# পুলিং লেয়ার ডিফাইন করা
def pool_layer(input):
    pooled_out = pool.pool_2d(input, (2, 2), ignore_border=True)
    return pooled_out

# ফুলি কানেক্টেড লেয়ার
def fully_connected_layer(input, n_in, n_out):
    W = theano.shared(np.random.randn(n_in, n_out).astype(np.float32), name='W')
    b = theano.shared(np.zeros(n_out).astype(np.float32), name='b')
    output = T.nnet.softmax(T.dot(input, W) + b)
    return output

ধাপ ৩: CNN আর্কিটেকচার তৈরি করা

এখন আমরা পুরো CNN আর্কিটেকচার তৈরি করব, যেখানে কনভোলিউশনাল লেয়ার, পুলিং লেয়ার, এবং ফুলি কানেক্টেড লেয়ার থাকবে।

# CNN মডেল
def cnn_model(input):
    # কনভোলিউশনাল লেয়ার 1
    conv1_out = conv_layer(input, filter_shape=(32, 3, 5, 5), image_shape=(None, 3, 28, 28))
    pool1_out = pool_layer(conv1_out)  # পুলিং
    
    # কনভোলিউশনাল লেয়ার 2
    conv2_out = conv_layer(pool1_out, filter_shape=(64, 32, 5, 5), image_shape=(None, 32, 12, 12))
    pool2_out = pool_layer(conv2_out)  # পুলিং
    
    # ফুলি কানেক্টেড লেয়ার 1
    pool2_out_flat = pool2_out.flatten(2)  # ফ্ল্যাটেন করা
    fc_out = fully_connected_layer(pool2_out_flat, n_in=64*4*4, n_out=128)
    
    # আউটপুট লেয়ার
    output = fully_connected_layer(fc_out, n_in=128, n_out=10)  # 10টি আউটপুট ক্লাস
    return output

# ইনপুট এবং আউটপুটের জন্য ফাংশন তৈরি
model_output = cnn_model(X)

ধাপ ৪: লস ফাংশন এবং অপটিমাইজেশন

CNN মডেল ট্রেনিং করতে, আমরা লস ফাংশন এবং অপটিমাইজেশন প্রয়োগ করব। এখানে আমরা ক্রস এন্ট্রপি লস এবং SGD অপটিমাইজার ব্যবহার করছি।

# লস ফাংশন (ক্রস এন্ট্রপি)
loss = T.nnet.categorical_crossentropy(model_output, Y).mean()

# অপটিমাইজার (SGD)
learning_rate = 0.01
params = [p for p in [conv_layer(X, (32, 3, 5, 5), (None, 3, 28, 28)), fully_connected_layer(pool2_out_flat, 64*4*4, 128), fully_connected_layer(fc_out, 128, 10)]]
grads = T.grad(loss, params)
updates = [(param, param - learning_rate * grad) for param, grad in zip(params, grads)]

# ফাংশন কম্পাইল করা
train_fn = theano.function([X, Y], loss, updates=updates)

ধাপ ৫: মডেল ট্রেনিং

এখন, আমরা ডেটাসেট ব্যবহার করে মডেলটি ট্রেন করব। সাধারণত, MNIST ডেটাসেট ব্যবহার করা হয়।

# MNIST ডেটাসেট লোড করা
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784')

# ডেটাসেট প্রস্তুতি
X_data = mnist.data.values / 255.0  # Normalizing
X_data = X_data.reshape(-1, 1, 28, 28)  # Reshaping into 4D tensor
Y_data = mnist.target.astype(np.int32)

# ট্রেনিং শুরু করা
for epoch in range(10):  # 10 epochs
    for i in range(0, len(X_data), 128):  # Mini-batch size of 128
        batch_X = X_data[i:i+128]
        batch_Y = Y_data[i:i+128]
        
        loss_val = train_fn(batch_X, batch_Y)  # Loss compute
        print(f'Epoch {epoch+1}, Loss: {loss_val}')

সারাংশ:

  • থিয়ানো (Theano) দিয়ে CNN তৈরি করতে প্রথমে টেনসর, কনভোলিউশনাল লেয়ার এবং পুলিং লেয়ার ডিফাইন করতে হয়।
  • এরপর, ফুলি কানেক্টেড লেয়ার এবং লস ফাংশন ব্যবহার করে একটি মডেল তৈরি করতে হয়।
  • মডেলটিকে স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (SGD) অথবা অন্য কোনো অপটিমাইজারের সাহায্যে ট্রেন করতে হয়।
  • সাধারণ MNIST ডেটাসেট ব্যবহার করে আমরা এই মডেলটি ট্রেন করতে পারি।

এই প্রক্রিয়াটি দিয়ে আপনি Theano দিয়ে CNN মডেল তৈরি করতে পারবেন এবং তা ডিপ লার্নিং বা মেশিন লার্নিং কাজের জন্য ব্যবহার করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...