TensorFlow হল Google-এর ওপেন-সোর্স মেশিন লার্নিং ফ্রেমওয়ার্ক, যা Python-এ অ্যালগরিদম, ডিপ লার্নিং মডেল এবং AI অ্যাপ্লিকেশন বাস্তবায়নে ব্যবহৃত হয়। গবেষণা থেকে প্রোডাকশন পর্যন্ত এর ব্যবহার বেপার।
টেনসর (Tensor) কী?
টেনসর হল TensorFlow-এ মূল ডেটা স্ট্রাকচার — একটি বহুমাত্রিক অ্যারে (multidimensional array) যা ডেটা ফ্লো গ্রাফের নোডগুলো সংযুক্ত করে। সহজ ভাষায়: এটি একটি জেনারালাইজড ম্যাট্রিক্স যা স্কেলার (০D), ভেক্টর (১D), ম্যাট্রিক্স (২D) এবং উচ্চ মাত্রার ডেটা ধারণ করতে পারে।
Keras: TensorFlow-এর হাই-লেভেল API
Keras ONEIROS প্রকল্প থেকে উদ্ভূত একটি ডিপ লার্নিং API, যা Python-এ লেখা। এটি TensorFlow-এর উপরে চলে এবং মেশিন লার্নিং মডেল দ্রুত তৈরি, পরীক্ষা এবং ডিপ্লয় করার জন্য উন্নত ইন্টারফেস প্রদান করে।
Keras-এর সুবিধা
- TensorFlow-এর সাথে অন্তর্নির্মিত (built-in)
- TPU/GPU ক্লাস্টারে স্কেলেবল
- মডেল ব্রাউজার (TensorFlow.js) এবং মোবাইল (TensorFlow Lite)-এ এক্সপোর্টযোগ্য
- ফাংশনাল API দিয়ে জটিল আর্কিটেকচার (নন-লিনিয়ার, শেয়ার্ড লেয়ার, মাল্টি-ইনপুট/আউটপুট) তৈরি সম্ভব
ইনস্টলেশন
pip install tensorflow
Keras অ্যাক্সেস
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
Google Colaboratory
এই উদাহরণ Google Colab-এ চালানো হয়েছে — ফ্রি GPU, জিরো সেটআপ, ব্রাউজার-ভিত্তিক Jupyter Notebook পরিবেশ।
উদাহরণ: কাস্টম Dense লেয়ার ইমপ্লিমেন্টেশন
class CustomDense(layers.Layer):
def __init__(self, units=32):
super(CustomDense, self).__init__()
self.units = units
def build(self, input_shape):
# ওয়েইট ম্যাট্রিক্স: (input_dim, units)
self.w = self.add_weight(
shape=(input_shape[-1], self.units),
initializer="random_normal",
trainable=True,
)
# বায়াস ভেক্টর: (units,)
self.b = self.add_weight(
shape=(self.units,),
initializer="random_normal",
trainable=True
)
def call(self, inputs):
# ফরওয়ার্ড পাস: y = xW + b
return tf.matmul(inputs, self.w) + self.b
# মডেল তৈরি
inputs = keras.Input(shape=(4,))
outputs = CustomDense(10)(inputs)
print("Keras মডেল তৈরি হচ্ছে...")
model = keras.Model(inputs, outputs)
কোড উৎস: TensorFlow অফিসিয়াল গাইড
আউটপুট
Keras মডেল তৈরি হচ্ছে...
ব্যাখ্যা
- CustomDense ক্লাস:
layers.Layerইনহেরিট করে একটি পূর্ণাঙ্গ কেরাস লেয়ার তৈরি করা হয়েছে। এটি বিল্ট-ইনDenseলেয়ারর অনুরূপ কাজ করে কিন্তু আंतरিক কার্যক্রম বোঝাতে সাহায্য করে। - __init__(): কনস্ট্রাক্টরে
units(নিউরনের সংখ্যা) গ্রহণ করে এবং সংরক্ষণ করে।super().__init__()কল করা বাধ্যতামূলক। - build(input_shape): লেয়ার প্রথমবার কল হলে স্বয়ংক্রিয়ভাবে ডাকা হয়। এখানে:
self.w: ওয়েইট ম্যাট্রিক্স, আকার(input_dim, units)।input_shape[-1]হল ইনপুট ফিচারের সংখ্যা।self.b: বায়াস ভেক্টর, আকার(units,)।add_weight(): ট্রেনেবল প্যারামিটার রেজিস্টার করে (গ্রেডিয়েন্ট ডিসেন্টের জন্য)।initializer="random_normal": সাধারণ বিতরণ থেকে র্যান্ডম ইনিশিয়ালাইজেশন।
- call(inputs): ফরওয়ার্ড পাস লজিক — ম্যাট্রিক্স গুণ (
tf.matmul) এবং বায়াস যোগ। এটি লেয়ারের মূল গণনা। - মডেল তৈরি:
keras.Inputদিয়ে ইনপুট লেয়ার, তারপর কাস্টম লেয়ার কল করে আউটপুট, এবংkeras.Modelদিয়ে পুরো মডেল সংজ্ঞায়িত।
বিল্ট-ইন Dense লেয়ারের সাথে তুলনা
# সমতুল্য বিল্ট-ইন ব্যবহার
from tensorflow.keras.layers import Dense
outputs = Dense(10, activation=None)(inputs) # activation=None ডিফল্ট
কাস্টম লেয়ার বুঝতে হলে বিল্ট-ইন Dense কীভাবে কাজ করে সেটা জানা গুরুত্বপূর্ণ। Dense আंतरিকভাবে একই build/call প্যাটার্ন ফলো করে।
কাস্টম লেয়ার কেন তৈরি করবেন?
- নন-স্ট্যান্ডার্ড অ্যাক্টিভেশন, কাস্টম ইনিশিয়ালাইজেশন, কনস্ট্রেইন্ট যুক্ত করতে।
- নতুন লেয়ার টাইপ গবেষণা/প্রোটোটাইপিং করতে।
- লেয়ারের আंतरিক 동작 (যেমন ওয়েইট শেয়ারিং, কাস্টম গ্রেডিয়েন্ট) নিয়ন্ত্রণ করতে।
get_config()ইমপ্লিমেন্ট করে সিরিয়ালাইজেবল বানাতে (পূর্বের আর্টিকেল দেখুন)।
সেরা অনুশীলন
- সম্ভব হলে বিল্ট-ইন লেয়ার (
Dense,Conv2D, ইত্যাদি) ব্যবহার করুন — অপ্টিমাইজড এবং টেস্টেড। - কাস্টম লেয়ার লিখতে হলে
build()-এ শেপ-ডিপেন্ডেন্ট ওয়েইট তৈরি করুন,__init__-এ না। - অ্যাক্টিভেশন ফাংশন আলাদা
Activationলেয়ার বাactivationআর্গুমেন্টে দিন। - ইনপুট ভ্যালিডেশনের জন্য
input_specসেট করুন।