Keras ব্যবহার করে একটি বেসিক নিউরাল নেটওয়ার্ক তৈরি করা খুবই সহজ। এখানে একটি সাধারণ ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক (Fully Connected Neural Network) তৈরি করার পদ্ধতি দেয়া হয়েছে, যেখানে Dense লেয়ার ব্যবহার করা হবে। এই নিউরাল নেটওয়ার্কটি MNIST ডেটাসেট ব্যবহার করে সংখ্যা চিহ্নিত করার জন্য তৈরি হবে।
প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন
আপনি যদি Keras এবং TensorFlow ইনস্টল না করে থাকেন, তবে এটি ইনস্টল করতে পারেন:
pip install tensorflow
কনফিগারেশন এবং ডেটাসেট লোড করা
আমরা MNIST ডেটাসেট ব্যবহার করব, যা 0 থেকে 9 পর্যন্ত ডিজিটের ইমেজ সম্বলিত একটি জনপ্রিয় ডেটাসেট। এটি Keras এর সাথে ডিফল্টভাবে অন্তর্ভুক্ত রয়েছে।
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
# MNIST ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# ডেটাকে স্কেল করা (0-255 এর মধ্যে স্কেল করে 0-1 এর মধ্যে নিয়ে আসা)
x_train = x_train / 255.0
x_test = x_test / 255.0
# আউটপুট (y) ভ্যালুগুলোকে ক্যাটাগরিকাল ডেটায় রূপান্তর করা
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
নিউরাল নেটওয়ার্ক মডেল তৈরি করা
এখন, Keras এর সাহায্যে একটি সোজা ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক তৈরি করব, যেখানে একটি ইনপুট লেয়ার, একটি হিডেন লেয়ার এবং একটি আউটপুট লেয়ার থাকবে।
# নিউরাল নেটওয়ার্ক মডেল তৈরি
model = Sequential()
# ইনপুট লেয়ার এবং প্রথম হিডেন লেয়ার
model.add(Flatten(input_shape=(28, 28))) # ইনপুট লেয়ার: 28x28 পিক্সেল (MNIST ইমেজের সাইজ)
model.add(Dense(128, activation='relu')) # হিডেন লেয়ার: 128 ন্যূনতম ইউনিট, 'relu' অ্যাক্টিভেশন ফাংশন
# আউটপুট লেয়ার
model.add(Dense(10, activation='softmax')) # আউটপুট লেয়ার: 10 ইউনিট (0-9 সংখ্যার জন্য), 'softmax' অ্যাক্টিভেশন ফাংশন
# মডেল কম্পাইল করা
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
মডেল প্রশিক্ষণ (Training)
মডেলটি তৈরি হওয়ার পর, এবার প্রশিক্ষণ শুরু করব।
# মডেল প্রশিক্ষণ করা
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_test, y_test))
এখানে:
- epochs: মডেল কতবার ট্রেন হবে, অর্থাৎ ডেটাসেটের পুরো পরিমাণ কতবার ব্যবহৃত হবে (এখানে ৫ বার)।
- batch_size: প্রতিবার কতটি স্যাম্পল প্রক্রিয়া করা হবে (এখানে ৩২টি)।
- validation_data: টেস্ট ডেটা যেটা প্রশিক্ষণের পর মডেলটির সঠিকতা যাচাই করতে ব্যবহৃত হবে।
মডেল মূল্যায়ন (Evaluation)
প্রশিক্ষণের পর, আমরা টেস্ট ডেটা ব্যবহার করে মডেলটির পারফরম্যান্স মূল্যায়ন করতে পারি।
# মডেল মূল্যায়ন
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")
মডেল ব্যবহার করে পূর্বাভাস (Prediction)
একবার মডেল ট্রেনিং হয়ে গেলে, এটি ব্যবহার করে নতুন ইনপুটের উপর পূর্বাভাস করা যেতে পারে। উদাহরণস্বরূপ, আমরা যদি একটি নতুন MNIST ইমেজ ব্যবহার করে সংখ্যা চিহ্নিত করতে চাই, তাহলে:
# একটি নমুনা ইমেজ দিয়ে পূর্বাভাস করা
import numpy as np
import matplotlib.pyplot as plt
# একটি নমুনা চিত্র
plt.imshow(x_test[0], cmap='gray')
plt.show()
# পূর্বাভাস করা
prediction = model.predict(np.expand_dims(x_test[0], axis=0))
predicted_class = np.argmax(prediction)
print(f"Predicted class: {predicted_class}")
এখানে:
- np.expand_dims: আমরা ইনপুট ইমেজের আকারে পরিবর্তন করছি যাতে এটি মডেল গ্রহণ করতে পারে।
- np.argmax: আমরা আউটপুট থেকে সর্বোচ্চ সম্ভাব্য শ্রেণি চিহ্নিত করছি।
সারাংশ
এই টিউটোরিয়ালে, আমরা Keras ব্যবহার করে একটি বেসিক ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক তৈরি করেছি যা MNIST ডেটাসেট থেকে ডিজিট চিহ্নিত করতে সক্ষম। এই প্রক্রিয়াতে আমরা:
- ডেটাসেট লোড করেছি এবং স্কেল করেছি।
- একটি ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক তৈরি করেছি।
- মডেলটি প্রশিক্ষণ এবং মূল্যায়ন করেছি।
- মডেলটি ব্যবহার করে নতুন পূর্বাভাস করেছি।
এটি ছিল Keras এর মাধ্যমে একটি বেসিক নিউরাল নেটওয়ার্ক তৈরি করার সাধারণ প্রক্রিয়া।
Keras তে Sequential মডেল তৈরি করা সহজ এবং এটি নিউরাল নেটওয়ার্কের এমন একটি মডেল যেখানে লেয়ারগুলো একে অপরের পর পর সাজানো থাকে। এটি সবচেয়ে সাধারণ এবং সরল মডেল যা প্রতিটি লেয়ার পূর্ববর্তী লেয়ারের আউটপুটের উপর ভিত্তি করে কাজ করে।
Sequential মডেল তৈরির জন্য আমরা Keras এর Sequential ক্লাস ব্যবহার করি এবং এর মধ্যে বিভিন্ন ধরনের লেয়ার (যেমন Dense, Flatten, Dropout, ইত্যাদি) যুক্ত করি।
এখানে একটি সাধারণ Fully Connected Neural Network তৈরি করার উদাহরণ দেওয়া হলো, যা MNIST ডেটাসেট ব্যবহার করে সংখ্যা চিহ্নিত করবে।
১. প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
প্রথমে, যদি আপনি TensorFlow ইনস্টল না করে থাকেন, তবে এটি ইনস্টল করতে পারেন:
pip install tensorflow
২. ডেটাসেট লোড এবং প্রক্রিয়া করা
এখানে আমরা MNIST ডেটাসেট ব্যবহার করছি, যা Keras এর মধ্যে ডিফল্টভাবে রয়েছে।
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
# MNIST ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# ডেটাকে স্কেল করা (0-255 এর মধ্যে স্কেল করে 0-1 এর মধ্যে নিয়ে আসা)
x_train = x_train / 255.0
x_test = x_test / 255.0
# আউটপুট (y) ভ্যালুগুলোকে ক্যাটাগরিকাল ডেটায় রূপান্তর করা
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
৩. Sequential মডেল তৈরি করা
এখন আমরা Sequential মডেল তৈরি করবো, যেখানে একটি Flatten লেয়ার ইনপুট হিসেবে গ্রহন করবে এবং তারপরে একটি Dense লেয়ার আছেঃ
# Sequential মডেল তৈরি করা
model = Sequential()
# ইনপুট লেয়ার এবং প্রথম হিডেন লেয়ার
model.add(Flatten(input_shape=(28, 28))) # ইনপুট লেয়ার: 28x28 পিক্সেল (MNIST ইমেজের সাইজ)
model.add(Dense(128, activation='relu')) # হিডেন লেয়ার: 128 ইউনিট, 'relu' অ্যাক্টিভেশন ফাংশন
# আউটপুট লেয়ার
model.add(Dense(10, activation='softmax')) # আউটপুট লেয়ার: 10 ইউনিট (0-9 সংখ্যার জন্য), 'softmax' অ্যাক্টিভেশন ফাংশন
# মডেল কম্পাইল করা
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
- Flatten লেয়ার: ইনপুট ডেটাকে ১ডি (১ ভেক্টর) আকারে রূপান্তর করে যাতে তা নিউরাল নেটওয়ার্কে দেয়া যায়।
- Dense লেয়ার: এই লেয়ারটি ফিডফরওয়ার্ড লেয়ার, যেখানে প্রতিটি ইউনিট পূর্ববর্তী লেয়ার থেকে ইনপুট নেয় এবং একটি অ্যাক্টিভেশন ফাংশন প্রয়োগ করে আউটপুট দেয়। এখানে আমরা ReLU (Rectified Linear Unit) অ্যাক্টিভেশন ফাংশন ব্যবহার করছি।
- আউটপুট লেয়ার: Softmax অ্যাক্টিভেশন ফাংশন ব্যবহৃত হচ্ছে, যা একটি ক্যালাসিফিকেশন সমস্যা সমাধান করতে সহায়তা করে, যেমন এখানে MNIST এর মধ্যে 10টি শ্রেণি (0-9)।
৪. মডেল প্রশিক্ষণ
এখন, আমরা আমাদের মডেলটি প্রশিক্ষণ (training) করব:
# মডেল প্রশিক্ষণ করা
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_test, y_test))
- epochs: মডেলটি কতবার পুরো ডেটাসেটের উপর প্রশিক্ষিত হবে (এখানে ৫ বার)।
- batch_size: প্রতি ব্যাচে কতটি স্যাম্পল প্রক্রিয়া করা হবে (এখানে ৩২টি)।
- validation_data: টেস্ট ডেটা যেটা প্রশিক্ষণের পর মডেলটির সঠিকতা যাচাই করতে ব্যবহৃত হবে।
৫. মডেল মূল্যায়ন
প্রশিক্ষণের পর, আমরা মডেলটি টেস্ট ডেটা দিয়ে মূল্যায়ন করবো:
# মডেল মূল্যায়ন
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")
৬. পূর্বাভাস করা
প্রশিক্ষণ শেষে, আপনি নতুন ডেটার উপর পূর্বাভাস করতে পারেন। উদাহরণস্বরূপ:
# একটি নমুনা ইমেজ দিয়ে পূর্বাভাস করা
import numpy as np
import matplotlib.pyplot as plt
# একটি নমুনা চিত্র
plt.imshow(x_test[0], cmap='gray')
plt.show()
# পূর্বাভাস করা
prediction = model.predict(np.expand_dims(x_test[0], axis=0))
predicted_class = np.argmax(prediction)
print(f"Predicted class: {predicted_class}")
এখানে:
- np.expand_dims: আমরা ইনপুট ইমেজের আকারে পরিবর্তন করছি যাতে এটি মডেল গ্রহণ করতে পারে।
- np.argmax: আউটপুট থেকে সর্বোচ্চ সম্ভাব্য শ্রেণি চিহ্নিত করছি।
সারাংশ
এই টিউটোরিয়ালে, আমরা Keras ব্যবহার করে একটি বেসিক Sequential মডেল তৈরি করেছি যা MNIST ডেটাসেট থেকে ডিজিট চিহ্নিত করতে সক্ষম। এই মডেলটি তৈরি করার জন্য:
- আমরা Flatten লেয়ার ব্যবহার করেছি ইনপুট ডেটাকে ১ডি ভেক্টরে রূপান্তর করতে।
- Dense লেয়ার ব্যবহার করেছি নিউরাল নেটওয়ার্কের বিভিন্ন স্তরে সংযোগ তৈরি করতে।
- Softmax অ্যাক্টিভেশন ফাংশন ব্যবহার করেছি শ্রেণি-ক্লাসিফিকেশনের জন্য।
এটি ছিল Keras তে Sequential মডেল তৈরি করার প্রক্রিয়া।
Dense লেয়ার (Fully Connected Layer) হল নিউরাল নেটওয়ার্কের সবচেয়ে সাধারণ এবং ব্যাপকভাবে ব্যবহৃত লেয়ার। একটি Dense লেয়ার প্রতিটি ইনপুটকে প্রতিটি আউটপুটের সাথে সংযোগ স্থাপন করে। এই লেয়ারে প্রতিটি নোড (নিউরন) একটি এক্টিভেশন ফাংশনের মাধ্যমে তার আউটপুট বের করে।
এখন, আমরা Keras ব্যবহার করে একটি Simple Neural Network তৈরি করব, যাতে একটি Dense লেয়ার ব্যবহার করা হবে। আমাদের এই উদাহরণে, আমরা MNIST ডেটাসেট ব্যবহার করব, যা হস্তাক্ষরের সংখ্যা চিহ্নিত করতে ব্যবহৃত হয়।
Keras এ Simple Neural Network তৈরি
প্রথমে প্রয়োজনীয় লাইব্রেরি ইনস্টল করা:
আপনি যদি Keras এবং TensorFlow ইনস্টল না করে থাকেন, তাহলে এটি ইনস্টল করতে হবে:
pip install tensorflowকোড উদাহরণ:
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.datasets import mnist from tensorflow.keras.utils import to_categorical # MNIST ডেটাসেট লোড করা (x_train, y_train), (x_test, y_test) = mnist.load_data() # ডেটা প্রিপ্রসেসিং: ইনপুট ডেটাকে নর্মালাইজ করা x_train = x_train.reshape((x_train.shape[0], 28 * 28)).astype('float32') / 255 x_test = x_test.reshape((x_test.shape[0], 28 * 28)).astype('float32') / 255 # আউটপুট লেবেলকে ক্যাটেগরিক্যাল আউটপুটে রূপান্তর করা y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10) # মডেল তৈরি করা model = Sequential() # Dense লেয়ার যোগ করা (নিউরাল নেটওয়ার্কের প্রথম লেয়ার) model.add(Dense(128, input_dim=28*28, activation='relu')) # 128 নিউরন model.add(Dense(10, activation='softmax')) # আউটপুট লেয়ার, 10 ক্লাস # মডেল কম্পাইল করা model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # মডেল প্রশিক্ষণ model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test)) # মডেল মূল্যায়ন loss, accuracy = model.evaluate(x_test, y_test) print(f'Loss: {loss}') print(f'Accuracy: {accuracy}')
ব্যাখ্যা:
- ডেটাসেট লোড:
mnist.load_data()ফাংশনটি MNIST ডেটাসেট লোড করে, যেখানে x_train এবং x_test ইনপুট ডেটা (ছবি), এবং y_train ও y_test তাদের লেবেল (সংখ্যা) থাকে।
- ডেটা প্রিপ্রসেসিং:
x_trainএবংx_testকে 28x28 পিক্সেল এর ২-ডি আউটপুট থেকে ১-ডি আউটপুটে (784 ভ্যালু) রূপান্তর করা হয় এবং নর্মালাইজ করা হয় (০-১ এর মধ্যে আনা)।to_categoricalফাংশনটি আউটপুট লেবেলকে ক্যাটেগরিক্যাল আউটপুটে রূপান্তরিত করে (যেমন, 0-9 সংখ্যাগুলির জন্য One-Hot Encoding)।
- Neural Network Model:
Sequential()মডেলটি Keras এ একটি সোজা লিনিয়ার স্ট্যাক মডেল তৈরি করতে ব্যবহৃত হয়।Dense(128)প্রথম Dense লেয়ারটি 128 নিউরন ব্যবহার করে এবংinput_dim=28*28দিয়ে ইনপুট ডেটার সাইজ নির্ধারণ করা হয়।activation='relu'রিলু (ReLU) এক্টিভেশন ফাংশনটি প্রথম লেয়ারের জন্য ব্যবহার করা হয়েছে, যা খুবই জনপ্রিয় এবং কার্যকরী।Dense(10)দ্বিতীয় লেয়ারটি আউটপুট লেয়ার, যেখানে 10 নিউরন থাকবে (প্রতিটি 0 থেকে 9 পর্যন্ত একটি সংখ্যা চিহ্নিত করতে)। এখানেactivation='softmax'ব্যবহার করা হয়েছে যাতে আউটপুট গুলি একটি সম্ভাবনা বিতরণে রূপান্তরিত হয় (One-Hot Encoding).
- মডেল কম্পাইল এবং প্রশিক্ষণ:
model.compile(): এখানে loss function হিসেবেcategorical_crossentropyএবং optimizer হিসেবেadamব্যবহার করা হয়েছে।metrics=['accuracy']দিয়ে মডেলের পারফরম্যান্স পরিমাপ করা হবে।model.fit(): মডেলটি 10 ইপোক (epochs) এর জন্য প্রশিক্ষিত হবে, এবং প্রতি ব্যাচে 32 ইনপুট ডেটা নিয়ে এটি প্রশিক্ষণ চলবে।
- মডেল মূল্যায়ন:
model.evaluate()ফাংশনটি টেস্ট ডেটাসেটের উপর মডেলের পারফরম্যান্স পর্যালোচনা করবে এবং লস এবং অ্যাকুরেসি দেখাবে।
সারাংশ
এটি ছিল একটি সাধারণ নিউরাল নেটওয়ার্কের উদাহরণ যা Keras এবং Dense লেয়ার ব্যবহার করে তৈরি করা হয়েছে। এখানে আমরা MNIST ডেটাসেট ব্যবহার করেছি এবং নিউরাল নেটওয়ার্কের একটি মৌলিক আর্কিটেকচার তৈরি করেছি, যাতে ইনপুট ডেটা হিসেবে ছবি এবং আউটপুট লেবেল হিসেবে সংখ্যা চিহ্নিত করা হয়।
Activation functions হল নিউরাল নেটওয়ার্কে ব্যবহৃত গুরুত্বপূর্ণ গাণিতিক ফাংশন যা ইনপুট এবং আউটপুট এর মধ্যে সম্পর্ক স্থাপন করে। এগুলি মডেলের সিখন ক্ষমতাকে প্রভাবিত করে এবং নির্ধারণ করে কখন নেটওয়ার্কটি একটি নির্দিষ্ট সিদ্ধান্ত নেবে। এখানে আমরা তিনটি জনপ্রিয় activation function সম্পর্কে আলোচনা করবো: ReLU, Sigmoid, এবং Softmax।
1. ReLU (Rectified Linear Unit)
সংজ্ঞা:
ReLU হল একটি খুব জনপ্রিয় activation function যা একটি নিউরাল নেটওয়ার্কে পজিটিভ ইনপুটগুলির জন্য লিনিয়ার আচরণ এবং নেগেটিভ ইনপুটগুলির জন্য শূন্য মান প্রদান করে।
ReLU এর গাণিতিক ফর্ম:
অর্থাৎ, যদি , তবে , আর যদি , তবে । এটি একটি খুব সহজ এবং কার্যকরী ফাংশন যা মডেলকে দ্রুত প্রশিক্ষিত হতে সহায়ক।
বৈশিষ্ট্য:
- Pros:
- কম্পিউটেশনালভাবে দ্রুত এবং সহজ।
- গ্র্যাডিয়েন্ট ভ্যানিশিং সমস্যা কমাতে সাহায্য করে।
- পজিটিভ ইনপুটে খুব ভালো কাজ করে এবং অতি সাধারণভাবে ইনপুটকে "অ্যাকটিভেট" করে।
- Cons:
- ডেড নোড: যদি ইনপুটটি শূন্য বা নেগেটিভ হয়, তবে নিউরাল নেটওয়ার্কের নিউরনটি "মারা" যেতে পারে এবং কোনো গ্র্যাডিয়েন্ট প্রবাহিত হয় না (এটি "ডেড রিলু" সমস্যা হতে পারে)।
ব্যবহার:
ReLU প্রধানত হিডেন লেয়ারে ব্যবহার করা হয়, কারণ এটি নন-লিনিয়ার আউটপুট প্রদান করে এবং নিউরাল নেটওয়ার্ককে উচ্চ স্তরের বৈশিষ্ট্য শিখতে সাহায্য করে।
2. Sigmoid
সংজ্ঞা:
Sigmoid ফাংশন একটি নন-লিনিয়ার activation function যা একটি ইনপুট ভ্যালুকে ০ থেকে ১ এর মধ্যে স্কেল করে। এটি সাধারণত বাইনারি ক্লাসিফিকেশন সমস্যায় ব্যবহৃত হয় যেখানে আউটপুট দুটি ক্লাসের মধ্যে একটি হওয়া উচিত।
Sigmoid এর গাণিতিক ফর্ম:
এটি S-আকৃতির (Sigmoid) কিউভাল করা একটি ফাংশন এবং আউটপুটের মান ০ থেকে ১ এর মধ্যে থাকে, যা সম্ভাবনা হিসেবেও ব্যাখ্যা করা যায়।
বৈশিষ্ট্য:
- Pros:
- আউটপুট ০ এবং ১ এর মধ্যে সীমাবদ্ধ থাকে, যা বাইনারি ক্লাসিফিকেশন ক্ষেত্রে ব্যবহার উপযোগী।
- লিনিয়ার না হওয়ার কারণে এটি আরো জটিল সম্পর্ক শিখতে সক্ষম।
- Cons:
- গ্র্যাডিয়েন্ট ভ্যানিশিং: ইনপুটের বড় ভ্যালুর জন্য গ্র্যাডিয়েন্ট ছোট হয়ে যায় (বা ০), যার ফলে প্রশিক্ষণ ধীর হয়ে যেতে পারে।
- আউটপুট সাধারণত একটি ছোট পরিসরে থাকে, যা কিছু পরিস্থিতিতে শিখন প্রক্রিয়াকে ধীর করে দিতে পারে।
ব্যবহার:
Sigmoid ফাংশনটি সাধারণত আউটপুট লেয়ারে ব্যবহৃত হয়, বিশেষ করে বাইনারি ক্লাসিফিকেশন সমস্যায়।
3. Softmax
সংজ্ঞা:
Softmax একটি activation function যা মূলত মাল্টিক্লাস ক্লাসিফিকেশন সমস্যায় ব্যবহৃত হয়। এটি আউটপুট লেয়ারের জন্য ব্যবহৃত হয় যেখানে একাধিক সম্ভাব্য ক্লাস থাকে এবং এটি প্রতিটি ক্লাসের জন্য একটি সম্ভাবনা প্রদান করে।
Softmax এর গাণিতিক ফর্ম:
এখানে হল আউটপুটের -তম ক্লাসের মান, এবং হল মোট ক্লাসের সংখ্যা। এটি সকল ক্লাসের জন্য সম্ভাবনার মোট যোগফল ১ করবে।
বৈশিষ্ট্য:
- Pros:
- প্রোবাবিলিটি আউটপুট: Softmax আউটপুট একটি বৈধ প্রোবাবিলিটি ডিসট্রিবিউশন প্রদান করে, যা সহজেই ব্যবহার করা যায়।
- বিভিন্ন ক্লাসের মধ্যে সিদ্ধান্ত নিতে সক্ষম, যেমন ছবি শ্রেণীবদ্ধকরণ বা ভাষা প্রক্রিয়াকরণ।
- Cons:
- এটি ভালো প্রশিক্ষণ সাপোর্ট না পেলে ধীর হয়ে যেতে পারে, বিশেষ করে যদি আউটপুট নিউরন অনেক বেশি হয়।
- বেসিকভাবে মাল্টিক্লাস কনফিগারেশনে এটি একাধিক ক্লাসের মধ্যে সর্বোচ্চ সম্ভাবনা নির্ধারণ করতে ব্যবহৃত হয়, কিন্তু এটি বাইনারি সমস্যায় খুব উপযোগী নয়।
ব্যবহার:
Softmax ফাংশনটি প্রধানত মাল্টিক্লাস ক্লাসিফিকেশন মডেলে আউটপুট লেয়ারে ব্যবহৃত হয়, যেমন চিত্র শ্রেণীবিভাজন বা বিভিন্ন শ্রেণীর মধ্যে নির্বাচিত বিকল্প।
সারাংশ
- ReLU (Rectified Linear Unit): দ্রুত প্রশিক্ষণের জন্য কার্যকর, কিন্তু নেগেটিভ ইনপুটের জন্য "ডেড নোড" সমস্যা থাকতে পারে।
- Sigmoid: বাইনারি ক্লাসিফিকেশন সমস্যার জন্য উপযুক্ত, তবে গ্র্যাডিয়েন্ট ভ্যানিশিং সমস্যা থাকতে পারে।
- Softmax: মাল্টিক্লাস ক্লাসিফিকেশন সমস্যার জন্য ব্যবহৃত, এটি প্রতিটি ক্লাসের জন্য একটি প্রোবাবিলিটি প্রদান করে।
প্রতিটি activation function এর নিজস্ব সুবিধা এবং সীমাবদ্ধতা রয়েছে এবং আপনি আপনার মডেল এবং ডেটার উপযুক্ততা অনুযায়ী এগুলো ব্যবহার করবেন।
Keras দিয়ে ডীপ লার্নিং মডেল তৈরি করার প্রক্রিয়ায় মডেল কম্পাইল, ট্রেনিং এবং ইভালুয়েশন অত্যন্ত গুরুত্বপূর্ণ পদক্ষেপ। প্রতিটি পদক্ষেপে নির্দিষ্ট কার্যাবলী সম্পাদন করা হয় যা মডেলটির কার্যকারিতা বৃদ্ধি করে। চলুন এগুলোর বিস্তারিত আলোচনা করা যাক:
১. মডেল কম্পাইল (Model Compilation)
মডেল কম্পাইল করার মাধ্যমে Keras মডেলকে প্রস্তুত করা হয় যাতে এটি প্রশিক্ষণ শুরু করতে পারে। এটি তিনটি প্রধান উপাদান নির্ধারণ করে:
অপটিমাইজার (Optimizer): অপটিমাইজার হলো একটি অ্যালগোরিদম যা মডেলটির প্যারামিটার আপডেট করে, যাতে লস ফাংশন মিনিমাইজ করা যায়। Keras বিভিন্ন অপটিমাইজার সরবরাহ করে, যেমন SGD, Adam, RMSProp, ইত্যাদি।
উদাহরণ:
optimizer = 'adam'লস ফাংশন (Loss Function): লস ফাংশন হলো একটি মেট্রিক যা মডেলটির ভুল (error) পরিমাপ করে। প্রশিক্ষণের সময় মডেলটি লস ফাংশন মিনিমাইজ করার চেষ্টা করে। ডিপ লার্নিং সমস্যার ধরণ অনুযায়ী লস ফাংশন নির্বাচন করা হয়। যেমন:
- শ্রেণীকরণের জন্য: categorical_crossentropy, binary_crossentropy
- রিগ্রেশন সমস্যার জন্য: mean_squared_error
উদাহরণ:
loss = 'categorical_crossentropy'মেট্রিক (Metrics): মেট্রিকগুলি মডেলের কার্যকারিতা পরিমাপ করে, এবং সাধারণত মডেল প্রশিক্ষণের পরে তা দেখানো হয়। যেমন: accuracy, precision, recall।
উদাহরণ:
metrics = ['accuracy']
মডেল কম্পাইল করার কোড উদাহরণ:
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
২. মডেল ট্রেনিং (Model Training)
মডেল ট্রেনিং একটি প্রক্রিয়া যা ডেটা ব্যবহার করে মডেলটির প্যারামিটার আপডেট করে। এটি fit() মেথডের মাধ্যমে করা হয়, যা ইনপুট ডেটা, টার্গেট আউটপুট, এবং অন্যান্য হাইপারপারামিটার প্রয়োজনীয়তা নিয়ে প্রশিক্ষণ প্রক্রিয়া শুরু করে।
fit() মেথড সাধারণত নিম্নলিখিত প্যারামিটারগুলো নেয়:
- x: ইনপুট ডেটা (feature)
- y: টার্গেট আউটপুট (label)
- batch_size: একত্রিত ডেটার সাইজ যা একবারে প্রশিক্ষণ করা হয়
- epochs: প্রশিক্ষণের জন্য মোট সময় বা পুনরাবৃত্তির সংখ্যা
- validation_data: ভ্যালিডেশন ডেটা, যার মাধ্যমে মডেলের পারফরম্যান্স যাচাই করা হয়
মডেল ট্রেনিংয়ের উদাহরণ:
history = model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))
৩. মডেল ইভালুয়েশন (Model Evaluation)
মডেল ইভালুয়েশন হল মডেলের কর্মক্ষমতা মূল্যায়ন করার প্রক্রিয়া, যাতে দেখা যায় যে এটি কতটা ভাল কাজ করছে। Keras এ evaluate() মেথড ব্যবহার করে মডেলটি ইভালুয়েট করা হয়। ইভালুয়েশন প্রক্রিয়ায় ইনপুট ডেটা এবং টার্গেট আউটপুট ব্যবহৃত হয়।
evaluate() মেথড সাধারণত নিম্নলিখিত প্যারামিটারগুলো নেয়:
- x: ইনপুট ডেটা (feature)
- y: টার্গেট আউটপুট (label)
- batch_size: একত্রিত ডেটার সাইজ
- verbose: ইভালুয়েশন প্রক্রিয়ার প্রগ্রেস দেখানোর জন্য
মডেল ইভালুয়েশনের উদাহরণ:
loss, accuracy = model.evaluate(x_test, y_test, batch_size=32)
print("Test Loss:", loss)
print("Test Accuracy:", accuracy)
সারাংশ
- মডেল কম্পাইল: মডেলকে প্রশিক্ষণের জন্য প্রস্তুত করার জন্য অপটিমাইজার, লস ফাংশন এবং মেট্রিক নির্ধারণ করা হয়।
- মডেল ট্রেনিং:
fit()মেথডের মাধ্যমে ইনপুট ডেটা এবং টার্গেট আউটপুটের সাহায্যে মডেল প্রশিক্ষিত হয়। - মডেল ইভালুয়েশন:
evaluate()মেথডের মাধ্যমে মডেলের কার্যকারিতা পরিমাপ করা হয়।
এই তিনটি প্রক্রিয়া মডেল তৈরি এবং মূল্যায়নের মূল অংশ। Keras এর সাহায্যে এই প্রক্রিয়াগুলি সহজেই এবং কার্যকরভাবে সম্পন্ন করা যায়।
Read more