এখানে আমরা একটি বাস্তব উদাহরণ দেখব, যেখানে আমরা স্টক মার্কেট প্রাইস প্রেডিকশন করতে LSTM (Long Short-Term Memory) ব্যবহার করব। আমরা Yahoo Finance থেকে Historical Stock Data ব্যবহার করব এবং সেটি দিয়ে Time Series Forecasting করা হবে।
প্রাথমিক ধাপসমূহ:
- পাইথন লাইব্রেরি ইনস্টল করা
- ডেটা সংগ্রহ এবং প্রস্তুতি
- LSTM মডেল তৈরি করা এবং ট্রেনিং করা
- পূর্বাভাস করা এবং ফলাফল দেখানো
১. লাইব্রেরি ইনস্টল করা
প্রথমে কিছু প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে। yfinance স্টক ডেটা সংগ্রহের জন্য এবং keras, numpy, pandas, matplotlib বিভিন্ন কাজের জন্য ব্যবহৃত হবে।
pip install yfinance
pip install keras
pip install numpy
pip install pandas
pip install matplotlib
২. ডেটা সংগ্রহ এবং প্রস্তুতি
আমরা এখানে yfinance লাইব্রেরি ব্যবহার করে Apple Inc. (AAPL) এর স্টক ডেটা সংগ্রহ করব এবং সেটিকে LSTM মডেল প্রশিক্ষণের জন্য প্রস্তুত করব।
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
# স্টক ডেটা সংগ্রহ
data = yf.download('AAPL', start='2015-01-01', end='2021-01-01')
# শুধুমাত্র 'Close' কলাম ব্যবহার করা
data = data['Close']
# ডেটার প্রথম কিছু অংশ দেখুন
print(data.head())
# ডেটাকে 0 থেকে 1 এর মধ্যে নরমালাইজেশন করা
scaler = MinMaxScaler(feature_range=(0, 1))
data_scaled = scaler.fit_transform(data.values.reshape(-1, 1))
# ডেটা ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
train_size = int(len(data_scaled) * 0.8)
train_data, test_data = data_scaled[:train_size], data_scaled[train_size:]
# ইনপুট তৈরির জন্য স্লাইসিং ফাংশন
def create_dataset(dataset, time_step=1):
X, y = [], []
for i in range(len(dataset) - time_step - 1):
X.append(dataset[i:(i + time_step), 0])
y.append(dataset[i + time_step, 0])
return np.array(X), np.array(y)
# স্লাইসিং করা
time_step = 100
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)
# ইনপুট আকারে রূপান্তর করা
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
৩. LSTM মডেল তৈরি এবং প্রশিক্ষণ
এখন LSTM মডেল তৈরি করতে হবে। আমরা keras ব্যবহার করে LSTM মডেল তৈরি করব এবং সেটি ট্রেনিং করব।
from keras.models import Sequential
from keras.layers import LSTM, Dense
# LSTM মডেল তৈরি
model = Sequential()
# LSTM লেয়ার যুক্ত করা
model.add(LSTM(units=50, return_sequences=False, input_shape=(X_train.shape[1], 1)))
# আউটপুট লেয়ার
model.add(Dense(units=1))
# মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='mean_squared_error')
# মডেল প্রশিক্ষণ
model.fit(X_train, y_train, epochs=20, batch_size=32)
৪. পূর্বাভাস করা এবং ফলাফল দেখানো
এখন, আমরা LSTM মডেলটি ব্যবহার করে ভবিষ্যতের স্টক প্রাইস পূর্বাভাস করব এবং টেস্ট ডেটার সাথে তুলনা করব।
# পূর্বাভাস করা
predicted_stock_price = model.predict(X_test)
# নরমালাইজেশন ফেরত আনা
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
y_test_actual = scaler.inverse_transform(y_test.reshape(-1, 1))
# ফলাফল দেখানো
plt.figure(figsize=(10,6))
plt.plot(y_test_actual, color='blue', label='Actual Stock Price')
plt.plot(predicted_stock_price, color='red', label='Predicted Stock Price')
plt.title('AAPL Stock Price Prediction using LSTM')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()
ফলাফল
এই কোডের মাধ্যমে আমরা LSTM মডেল ব্যবহার করে Apple Inc. (AAPL) এর ভবিষ্যতের স্টক প্রাইসের পূর্বাভাস দেখতে পাবো। আপনি ডেটা ও মডেল তৈরির প্রক্রিয়ায় কিছু পরিবর্তন করে অন্যান্য স্টকের উপরও পরীক্ষণ করতে পারেন।
সারাংশ
- LSTM ব্যবহার করে সময় সিরিজ ডেটার ভবিষ্যৎ পূর্বাভাস করা সম্ভব, বিশেষ করে স্টক মার্কেটের মতো জটিল এবং অস্থির ডেটাতে।
- আমরা Python এবং Keras ব্যবহার করে LSTM মডেল তৈরি করেছি, যেটি Historical Data (যেমন স্টক প্রাইস) নিয়ে ভবিষ্যতের প্রেডিকশন করেছে।
- MinMaxScaler ব্যবহার করে ডেটা স্কেলিং করা হয়েছে যাতে মডেল আরো কার্যকরীভাবে কাজ করতে পারে।
এই ধাপগুলির মাধ্যমে আপনি অন্যান্য Time Series Forecasting কাজেও LSTM মডেল ব্যবহার করতে পারবেন।
H2O.ai একটি শক্তিশালী মেশিন লার্নিং প্ল্যাটফর্ম যা বিভিন্ন মডেল ট্রেনিং, টেস্টিং এবং ডিপ্লয়মেন্ট প্রক্রিয়া সহজ করে তোলে। এই টিউটোরিয়ালে, আমরা H2O.ai ব্যবহার করে একটি সম্পূর্ণ মেশিন লার্নিং প্রজেক্ট তৈরি করবো, যেখানে ডেটা লোড করা, মডেল ট্রেনিং, মডেল টেস্টিং এবং পূর্বাভাসের প্রক্রিয়া অন্তর্ভুক্ত থাকবে।
ধাপ ১: H2O.ai ইনস্টলেশন
প্রথমে Python এ H2O.ai ইনস্টল করতে হবে। যদি আপনি Python ব্যবহার করেন, নিচের কমান্ডটি চালান:
pip install h2o
ধাপ ২: ডেটা লোড করা
এখন, একটি ডেটাসেট লোড করা যাক। এখানে আমরা UCI এর একটি জনপ্রিয় ডেটাসেট "Iris" ব্যবহার করবো।
import h2o
# H2O সার্ভার চালু করা
h2o.init()
# ডেটাসেট লোড করা
data = h2o.import_file("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data", header=0)
# ডেটার প্রথম কয়েকটি রেকর্ড দেখুন
data.head()
এই কোডটি iris.data ডেটাসেটটি H2O এ লোড করবে।
ধাপ ৩: ডেটা প্রিপ্রসেসিং
ডেটা প্রিপ্রসেসিং বা প্রি-প্রসেসিং হল ডেটাকে মডেলিংয়ের জন্য প্রস্তুত করার প্রক্রিয়া। আমরা এখানে লক্ষ্য কলাম (target column) এবং ইনপুট ফিচারগুলো আলাদা করবো।
# লক্ষ্য কলাম নির্বাচন
data.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']
# ডেটাকে ইনপুট এবং আউটপুট ফিচারে ভাগ করা
X = data.columns[:-1] # ইনপুট ফিচার
y = data.columns[-1] # লক্ষ্য (target) ফিচার
# ডেটার বিভাজন (train/test)
train, test = data.split_frame(ratios=[.8])
এখানে আমরা ডেটাকে ৮০% প্রশিক্ষণ (train) এবং ২০% টেস্ট (test) সেটে ভাগ করেছি।
ধাপ ৪: মডেল ট্রেনিং
এখন, আমরা H2O.ai এর Random Forest মডেলটি ব্যবহার করে মডেল ট্রেনিং করবো।
from h2o.estimators import H2ORandomForestEstimator
# মডেল তৈরি করা
rf_model = H2ORandomForestEstimator(ntrees=50, max_depth=20)
# মডেল প্রশিক্ষণ
rf_model.train(x=X, y=y, training_frame=train)
এই কোডটি একটি Random Forest মডেল তৈরি করবে এবং আমাদের প্রশিক্ষণ ডেটা ব্যবহার করে সেটি প্রশিক্ষিত হবে।
ধাপ ৫: মডেল মূল্যায়ন
এখন, আমরা আমাদের ট্রেন করা মডেলটি টেস্ট ডেটার উপর মূল্যায়ন করবো। আমরা accuracy এবং অন্যান্য মূল্যায়ন মেট্রিক্স ব্যবহার করতে পারি।
# টেস্ট ডেটার উপর পূর্বাভাস করা
predictions = rf_model.predict(test)
# মডেল মূল্যায়ন
performance = rf_model.model_performance(test)
print(performance)
এই কোডটি আমাদের মডেলটির পারফরম্যান্স বের করে দিবে, যেমন accuracy, AUC, এবং অন্যান্য মেট্রিক্স।
ধাপ ৬: ভবিষ্যৎ পূর্বাভাস
এখন, আমরা মডেলটি ব্যবহার করে নতুন ডেটার জন্য পূর্বাভাস করতে পারি।
# নতুন ডেটার জন্য পূর্বাভাস
new_data = h2o.H2OFrame([[5.1, 3.5, 1.4, 0.2]]) # নতুন ইনপুট ডেটা
prediction = rf_model.predict(new_data)
print("Prediction: ", prediction)
এই কোডটি একটি নতুন উদাহরণ ডেটা দিয়ে পূর্বাভাস করবে এবং সেই অনুযায়ী ফলাফল দেখাবে।
ধাপ ৭: মডেল সেভ করা
মডেলটি সফলভাবে ট্রেন করার পর, আপনি মডেলটি সংরক্ষণ করতে পারেন, যাতে ভবিষ্যতে ব্যবহার করা যায়।
# মডেল সেভ করা
model_path = h2o.save_model(model=rf_model, path="/path/to/save/model", force=True)
print("Model saved to:", model_path)
এই কোডটি আপনার মডেলটি সেভ করবে এবং সেভ করার পাথ দেখাবে।
সারাংশ
এই টিউটোরিয়ালে, আমরা H2O.ai ব্যবহার করে একটি সম্পূর্ণ মেশিন লার্নিং প্রজেক্ট তৈরি করেছি, যেখানে আমরা:
- ডেটা লোড করেছি,
- ডেটা প্রিপ্রসেসিং করেছি,
- একটি Random Forest মডেল ট্রেন করেছি,
- মডেল মূল্যায়ন করেছি,
- ভবিষ্যৎ পূর্বাভাস দিয়েছি এবং,
- মডেলটি সেভ করেছি।
এটি একটি মৌলিক মেশিন লার্নিং প্রজেক্ট, যা H2O.ai প্ল্যাটফর্মের মাধ্যমে দ্রুত এবং কার্যকরীভাবে তৈরি করা যায়।
AutoML এবং Ensemble Modeling দুটি শক্তিশালী কৌশল যা মেশিন লার্নিং মডেল তৈরির প্রক্রিয়াকে সহজতর এবং কার্যকরী করে তোলে। চলুন, এই দুটি প্রযুক্তি বিস্তারিতভাবে আলোচনা করি।
১. AutoML (Automated Machine Learning)
AutoML এমন একটি পদ্ধতি যা মেশিন লার্নিং প্রক্রিয়ার অটোমেশন করে, বিশেষত ডেটা প্রিপ্রসেসিং, মডেল নির্বাচন, হাইপারপ্যারামিটার টিউনিং, এবং মডেল অপটিমাইজেশন। AutoML এর লক্ষ্য হল এমন একটি সিস্টেম তৈরি করা যা মেশিন লার্নিং মডেল তৈরি এবং প্রশিক্ষণ প্রক্রিয়া স্বয়ংক্রিয়ভাবে সম্পাদন করতে পারে, যা ডেটা সায়েন্টিস্টদের জন্য কাজকে অনেক সহজ করে দেয়।
AutoML এর প্রধান কাজ:
- ডেটা প্রিপ্রসেসিং: AutoML ডেটাকে পরিষ্কার এবং প্রস্তুত করার জন্য বিভিন্ন পদক্ষেপ যেমন মিসিং ভ্যালু পূর্ণ করা, কেটেগরিক্যাল ভ্যালুগুলিকে ন্যুমেরিক্যাল ফর্মে রূপান্তর করা ইত্যাদি করে।
- মডেল নির্বাচন: AutoML বিভিন্ন মডেলের মধ্যে সেরা মডেলটি নির্বাচন করে (যেমন, Logistic Regression, Random Forest, XGBoost, Neural Networks)।
- হাইপারপ্যারামিটার টিউনিং: মডেলের হাইপারপ্যারামিটারগুলি স্বয়ংক্রিয়ভাবে অপটিমাইজ করা হয়।
- মডেল ভ্যালিডেশন: AutoML কনফিগারেশনের জন্য ক্রস-ভ্যালিডেশন এবং অন্যান্য স্ট্যাটিস্টিক্যাল মেট্রিক্স ব্যবহার করে মডেলের কার্যকারিতা যাচাই করে।
AutoML এর জনপ্রিয় লাইব্রেরি:
TPOT (Tree-based Pipeline Optimization Tool):
- Python এর জন্য AutoML লাইব্রেরি, যা genetic algorithms ব্যবহার করে মডেল অপটিমাইজ করে।
TPOT উদাহরণ:
from tpot import TPOTClassifier from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split # ডেটাসেট লোড করা digits = load_digits() X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2) # AutoML মডেল তৈরি করা tpot = TPOTClassifier( generations=5, population_size=20, random_state=42 ) tpot.fit(X_train, y_train) # মডেল মূল্যায়ন print("Test Accuracy: ", tpot.score(X_test, y_test)) tpot.export('best_model_pipeline.py')- Auto-sklearn:
- Scikit-learn এর উপর ভিত্তি করে তৈরি একটি AutoML লাইব্রেরি, যা মডেল অপটিমাইজেশন এবং হাইপারপ্যারামিটার টিউনিং সমর্থন করে।
- H2O.ai:
- H2O.ai এর AutoML টুলস দ্বারা স্বয়ংক্রিয়ভাবে বিভিন্ন মডেল তৈরির প্রক্রিয়া সম্পাদিত হয়। এটি সহজে ব্যবহারযোগ্য এবং মেশিন লার্নিং ডেভেলপমেন্টে সাহায্য করে।
- Google Cloud AutoML:
- Google এর ক্লাউড সার্ভিস, যা ইমেজ, টেক্সট, এবং ভিডিও ডেটার জন্য AutoML সমাধান প্রদান করে।
AutoML এর সুবিধা:
- স্বয়ংক্রিয়ভাবে ডেটা প্রিপ্রসেসিং, মডেল নির্বাচন, এবং হাইপারপ্যারামিটার টিউনিং।
- ডেটা সায়েন্টিস্টদের জন্য প্রক্রিয়া সহজ করে দেয়।
- দ্রুত এবং কার্যকরী মডেল তৈরি করতে সাহায্য করে।
- মডেল নির্বাচন এবং অপটিমাইজেশন প্রক্রিয়া সময় কমায়।
২. Ensemble Model তৈরি
Ensemble Modeling হল একাধিক মডেল ব্যবহার করে তাদের ফলাফলের একটি একক সিদ্ধান্ত তৈরি করা। এটি সাধারণত মডেলগুলির শক্তিশালী দিকগুলিকে একত্রিত করে এবং দুর্বলতা কমিয়ে আনে, ফলে এর কার্যকারিতা উন্নত হয়। Ensemble মডেলগুলির মধ্যে সাধারণ পদ্ধতিগুলি হল:
- Bagging (Bootstrap Aggregating):
- Bagging পদ্ধতিতে ডেটা সেটের বিভিন্ন সাবসেট থেকে একাধিক মডেল তৈরি করা হয়, এবং তাদের পূর্বাভাসের গড় বা ভোটিংয়ের মাধ্যমে চূড়ান্ত ফলাফল নির্ধারণ করা হয়। Random Forest হল একটি জনপ্রিয় Bagging মডেল।
- Boosting:
- Boosting পদ্ধতিতে একটি মৌলিক মডেল প্রশিক্ষিত হয় এবং তার পরবর্তী মডেলগুলি ভুল পূর্বাভাস গুলি সংশোধন করে। XGBoost, AdaBoost, এবং Gradient Boosting হল জনপ্রিয় Boosting মডেল।
- Stacking:
- Stacking মডেল একাধিক মডেলের ফলাফল নিয়ে একটি নতুন মডেল তৈরি করে। এই মডেলটি বিভিন্ন মডেলের আউটপুট থেকে চূড়ান্ত সিদ্ধান্ত নেয়। এটি একটি দ্বিতীয় স্তরের মডেল ব্যবহার করে।
Ensemble Model উদাহরণ (Random Forest):
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits
# ডেটাসেট লোড করা
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2)
# Random Forest মডেল তৈরি করা
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# মডেল মূল্যায়ন
accuracy = model.score(X_test, y_test)
print("Test Accuracy: ", accuracy)
Boosting Example (XGBoost):
import xgboost as xgb
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
# ডেটাসেট লোড করা
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2)
# XGBoost মডেল তৈরি করা
model = xgb.XGBClassifier(n_estimators=100, max_depth=5)
model.fit(X_train, y_train)
# মডেল মূল্যায়ন
accuracy = model.score(X_test, y_test)
print("Test Accuracy: ", accuracy)
Stacking Example:
from sklearn.ensemble import StackingClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
# ডেটাসেট লোড করা
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2)
# Base models
base_learners = [
('rf', RandomForestClassifier(n_estimators=100)),
('gb', GradientBoostingClassifier(n_estimators=100))
]
# Stacking model তৈরি করা
stacking_model = StackingClassifier(estimators=base_learners, final_estimator=LogisticRegression())
stacking_model.fit(X_train, y_train)
# মডেল মূল্যায়ন
accuracy = stacking_model.score(X_test, y_test)
print("Test Accuracy: ", accuracy)
সারাংশ
- AutoML হল মেশিন লার্নিং প্রক্রিয়ার স্বয়ংক্রিয়করণ, যা মডেল তৈরি, হাইপারপ্যারামিটার টিউনিং এবং ডেটা প্রিপ্রসেসিং সম্পাদন করতে সহায়ক।
- Ensemble Modeling একাধিক মডেলের সাহায্যে কার্যকারিতা উন্নত করতে ব্যবহৃত হয়, যেখানে বিভিন্ন মডেলের আউটপুট একত্রিত করে চূড়ান্ত সিদ্ধান্ত নেওয়া হয়। Bagging, Boosting, এবং Stacking হল এর প্রধান পদ্ধতি।
এগুলি মডেল তৈরির প্রক্রিয়া দ্রুত এবং আরও কার্যকরী করে তোলে, এবং মডেলগুলির পারফরম্যান্স উন্নত করতে সহায়ক।
Image Classification হল একটি জনপ্রিয় Deep Learning সমস্যা, যেখানে মডেলটি একটি চিত্রের মধ্যে বস্তু বা শ্রেণী চিহ্নিত করতে সক্ষম হয়। এই প্রজেক্টে আমরা একটি সাধারণ Convolutional Neural Network (CNN) ব্যবহার করে একটি Image Classification প্রজেক্ট তৈরি করব।
এখানে আমরা Keras এবং TensorFlow ব্যবহার করে একটি Image Classification মডেল তৈরি করব, যা একটি পপুলার ডেটাসেট যেমন CIFAR-10 বা MNIST ডেটাসেট ব্যবহার করবে।
১. প্রজেক্টের উদ্দেশ্য
এই প্রজেক্টের উদ্দেশ্য হলো একটি Image Classification মডেল তৈরি করা, যা একটি চিত্রের শ্রেণী চিহ্নিত করবে। আমরা এই মডেলটিকে Deep Learning এর মাধ্যমে প্রশিক্ষণ দিব, যেখানে CNN ব্যবহার করা হবে।
২. প্রয়োজনীয় প্যাকেজ ইনস্টলেশন
এই প্রজেক্টে TensorFlow এবং Keras লাইব্রেরি ব্যবহার করা হবে। প্রথমে এই লাইব্রেরিগুলি ইনস্টল করুন:
pip install tensorflow
৩. ডেটাসেট লোড করা
আমরা CIFAR-10 ডেটাসেট ব্যবহার করব, যা ১০টি শ্রেণীতে বিভক্ত ৬০,০০০ চিত্র নিয়ে গঠিত। আমরা এই ডেটাসেটটি Keras থেকে সরাসরি লোড করব।
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
# ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# ডেটার স্কেল পরিবর্তন করা (0-255 থেকে 0-1)
x_train, x_test = x_train / 255.0, x_test / 255.0
এখানে x_train এবং x_test চিত্রের ডেটা, এবং y_train ও y_test তাদের শ্রেণী ট্যাগ।
৪. মডেল তৈরি করা (CNN)
এখন আমরা একটি Convolutional Neural Network (CNN) তৈরি করব, যা ইমেজ ক্লাসিফিকেশন কাজের জন্য খুবই কার্যকর। আমরা এখানে ২টি কনভলিউশনাল লেয়ার এবং ডেন্স লেয়ার ব্যবহার করব।
from tensorflow.keras import layers, models
# মডেল তৈরি করা
model = models.Sequential([
# প্রথম কনভলিউশনাল লেয়ার
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
layers.MaxPooling2D((2, 2)),
# দ্বিতীয় কনভলিউশনাল লেয়ার
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
# তৃতীয় কনভলিউশনাল লেয়ার
layers.Conv2D(64, (3, 3), activation='relu'),
# ফ্ল্যাট লেয়ার
layers.Flatten(),
layers.Dense(64, activation='relu'),
# আউটপুট লেয়ার (১০টি শ্রেণী)
layers.Dense(10)
])
# মডেল সংক্ষেপ দেখুন
model.summary()
৫. মডেল কম্পাইল করা
এখন আমাদের মডেল কম্পাইল করতে হবে। আমরা Sparse Categorical Crossentropy লস ফাংশন এবং Adam Optimizer ব্যবহার করব।
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
৬. মডেল প্রশিক্ষণ (Training the Model)
এখন আমরা আমাদের CNN মডেলটি ট্রেনিং করব। আমরা ১০টি ইপোকের জন্য ট্রেনিং করব।
history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
এটি আমাদের মডেলটি ট্রেনিং করবে এবং প্রতি ইপোক শেষে পরীক্ষামূলক ডেটার উপর মূল্যায়ন করবে।
৭. মডেল মূল্যায়ন (Model Evaluation)
মডেল প্রশিক্ষণ শেষে, আমরা পরীক্ষা ডেটাসেট ব্যবহার করে মডেলটির পারফরম্যান্স মূল্যায়ন করব।
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f'\nTest accuracy: {test_acc}')
এটি পরীক্ষা ডেটাসেটের উপর মডেলটির একিউরেসি পরিমাপ করবে এবং স্কোর দেখাবে।
৮. পূর্বাভাস তৈরি (Making Predictions)
আপনি মডেলটি প্রশিক্ষণ দেওয়ার পর, নতুন চিত্রের জন্য পূর্বাভাস তৈরি করতে পারেন।
predictions = model.predict(x_test)
# পূর্বাভাস দেখানো (প্রথম ৫টি চিত্র)
print(predictions[:5])
এটি predictions তালিকায় প্রথম ৫টি পূর্বাভাস দেখাবে, যেখানে প্রতিটি পূর্বাভাস একটি ভেক্টর হবে যা বিভিন্ন শ্রেণীর জন্য আউটপুট স্কোর প্রদান করবে।
৯. মডেল সংরক্ষণ (Saving the Model)
প্রশিক্ষিত মডেলটি সংরক্ষণ করা যাবে, যাতে ভবিষ্যতে পুনরায় ব্যবহার করা যায়।
model.save('image_classification_model.h5')
এটি একটি image_classification_model.h5 ফাইল তৈরি করবে, যা আপনি পরে লোড এবং ব্যবহার করতে পারবেন।
১০. সারাংশ
এই প্রজেক্টে আমরা একটি সাধারণ Convolutional Neural Network (CNN) ব্যবহার করে Image Classification প্রজেক্ট তৈরি করেছি। H2O.ai বা TensorFlow/Keras ব্যবহারের মাধ্যমে সঠিকভাবে টিউন করা মডেলগুলি, বিশেষ করে CNN মডেলগুলো ইমেজ ক্লাসিফিকেশনে অত্যন্ত কার্যকরী।
এটি একটি খুব সহজ Image Classification প্রজেক্ট উদাহরণ ছিল যা CIFAR-10 ডেটাসেট ব্যবহার করেছে, তবে আপনি অন্য যেকোনো ডেটাসেটও ব্যবহার করতে পারেন একই প্রক্রিয়া অনুসরণ করে।
মডেল ডেপ্লয়মেন্ট হল মডেলটিকে বাস্তব পরিবেশে চালানোর জন্য প্রস্তুত করা, যাতে এটি বাস্তব সময়ে পূর্বাভাস প্রদান করতে পারে। API Integration এর মাধ্যমে মডেলটি অন্যান্য অ্যাপ্লিকেশন বা সিস্টেমের সঙ্গে সংযুক্ত করা হয়। এখানে, আমরা H2O.ai তে মডেল ডেপ্লয়মেন্ট এবং API ইন্টিগ্রেশন এর একটি উদাহরণ দেখাব।
১. মডেল ডেপ্লয়মেন্ট: H2O.ai মডেলকে REST API এর মাধ্যমে ডেপ্লয় করা
H2O.ai একটি শক্তিশালী মেশিন লার্নিং প্ল্যাটফর্ম যা REST API এর মাধ্যমে মডেল ডেপ্লয়মেন্ট সাপোর্ট করে। এটি একটি HTTP সার্ভিস প্রদান করে, যা অ্যাপ্লিকেশন বা সার্ভিসগুলোকে মডেলটির সাথে সংযুক্ত করতে সাহায্য করে।
১.১. H2O.ai মডেল ট্রেনিং করা (Python)
প্রথমে, H2O.ai ব্যবহার করে মডেল ট্রেনিং করতে হবে। উদাহরণস্বরূপ, একটি র্যান্ডম ফরেস্ট মডেল তৈরি করা হচ্ছে:
import h2o
from h2o.estimators import H2ORandomForestEstimator
# H2O সার্ভার চালু করা
h2o.init()
# ডেটা লোড করা
data = h2o.import_file("path_to_your_data.csv")
# ট্রেনিং এবং টেস্ট ডেটা বিভাজন
train, test = data.split_frame(ratios=[.8])
# মডেল তৈরি করা
model = H2ORandomForestEstimator()
model.train(x=["column1", "column2", "column3"], y="target_column", training_frame=train)
১.২. মডেল সার্ভার হিসেবে ডেপ্লয় করা
H2O.ai তে মডেল ডেপ্লয় করার জন্য H2O.ai Driverless AI বা H2O-3 REST API ব্যবহার করা যায়। নিচে একটি উদাহরণ দেওয়া হল, যেখানে মডেলটি mojo (Model Object Optimized) ফরম্যাটে সেভ করে API এর মাধ্যমে ডেপ্লয় করা হয়েছে।
# মডেল সেভ করা MOJO ফরম্যাটে
model_path = h2o.download_mojo(model, path="/path/to/save/your_model.zip")
১.৩. REST API ব্যবহার করে পূর্বাভাস
এখন, MOJO ফরম্যাটে সেভ করা মডেলটি একটি HTTP REST API সার্ভিসে ডেপ্লয় করতে হবে। সাধারণত, মডেলটি API সার্ভিস হিসেবে হোস্ট করা হয়, যা ডেটা গ্রহণ করে পূর্বাভাস প্রদান করে।
এখানে একটি উদাহরণ দেখানো হয়েছে যেখানে Flask ব্যবহার করে API তৈরি করা হয়েছে:
from flask import Flask, request, jsonify
import h2o
from h2o.estimators import H2ORandomForestEstimator
app = Flask(__name__)
# H2O সার্ভার চালু করা
h2o.init()
# মডেল লোড করা (MOJO ফাইল থেকে)
model = h2o.import_mojo("/path/to/your_model.zip")
@app.route('/predict', methods=['POST'])
def predict():
# ইনপুট ডেটা পাওয়া
input_data = request.get_json()
# ইনপুট ডেটাকে H2O DataFrame এ রূপান্তর
input_frame = h2o.H2OFrame(input_data)
# পূর্বাভাস প্রদান
predictions = model.predict(input_frame)
# পূর্বাভাসের ফলাফল রিটার্ন করা
return jsonify(predictions.as_data_frame().to_dict())
if __name__ == '__main__':
app.run(debug=True)
এটি একটি Flask API তৈরি করবে, যা POST রিকোয়েস্টে ইনপুট ডেটা নিয়ে পূর্বাভাস প্রদান করবে।
২. API Integration: মডেলকে অন্য অ্যাপ্লিকেশনে ইন্টিগ্রেট করা
একবার মডেল API সার্ভারে ডেপ্লয় করা হলে, এটি অন্য অ্যাপ্লিকেশন বা সিস্টেমের সাথে ইন্টিগ্রেট করা যেতে পারে। উদাহরণস্বরূপ, একটি Node.js অ্যাপ্লিকেশনকে H2O.ai মডেলের API এর সাথে ইন্টিগ্রেট করা যেতে পারে।
২.১. Node.js এ API Integration
const axios = require('axios');
const input_data = {
"column1": 10,
"column2": 20,
"column3": 30
};
axios.post('http://localhost:5000/predict', input_data)
.then(function (response) {
console.log('Prediction:', response.data);
})
.catch(function (error) {
console.log('Error:', error);
});
এখানে, Node.js অ্যাপ্লিকেশনটি Flask API এ POST রিকোয়েস্ট পাঠাচ্ছে, এবং পূর্বাভাস ফলাফল পাচ্ছে। এইভাবে, H2O.ai মডেলকে অন্য অ্যাপ্লিকেশন বা সিস্টেমে ইন্টিগ্রেট করা সম্ভব।
৩. মডেল ডেপ্লয়মেন্ট এবং API ইন্টিগ্রেশন এর চ্যালেঞ্জ
- স্কেলিং: একাধিক ব্যবহারকারী বা বড় পরিসরে API কল পরিচালনা করার জন্য স্কেলিং নিশ্চিত করতে হবে।
- অপারেশনাল রক্ষণাবেক্ষণ: API সার্ভিসটি পরিচালনা এবং পর্যবেক্ষণ করার জন্য যথাযথ অপারেশনাল টুলস এবং মনিটরিং ব্যবস্থা প্রয়োজন।
- সিকিউরিটি: মডেল API এর জন্য সিকিউরিটি ব্যবস্থা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষত যদি এটি পাবলিক বা সেমি-পাবলিক ডেটার সাথে কাজ করে।
সারাংশ
মডেল ডেপ্লয়মেন্ট এবং API ইন্টিগ্রেশন হল মডেলকে উৎপাদন পরিবেশে বাস্তব সময়ে পূর্বাভাস প্রদান করার জন্য ব্যবহৃত একটি অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া। H2O.ai তে মডেল ডেপ্লয় করার জন্য MOJO ফরম্যাটে মডেল সেভ করে REST API তৈরি করা যায়। Flask বা Node.js এর মাধ্যমে মডেল API ইন্টিগ্রেট করা সম্ভব, যা বিভিন্ন অ্যাপ্লিকেশনে মডেলটির পূর্বাভাস ব্যবহারের সুযোগ সৃষ্টি করে।
Read more