টেনসর ম্যানিপুলেশন হলো গাণিতিক এবং ডিপ লার্নিং কাজের জন্য টেনসর (multi-dimensional array) এর বিভিন্ন অপারেশন ও পরিবর্তন। টেনসর ম্যানিপুলেশন করা হয় ডাটা প্রক্রিয়াকরণের সময়, যেমন ডিপ লার্নিং মডেল তৈরির সময় ইনপুট ডেটা ও মডেল প্যারামিটার গুলি প্রক্রিয়াকরণের জন্য।
টেনসর হল একটি মাল্টি-ডাইমেনশনাল অ্যারে, যা স্কেলার, ভেক্টর, ম্যাট্রিক্স এবং আরও উচ্চমাত্রার ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। টেনসর ম্যানিপুলেশন বেশিরভাগ NumPy এবং Theano এর মতো লাইব্রেরির মাধ্যমে করা যায়।
টেনসর ম্যানিপুলেশনের মূল অপারেশনসমূহ:
১. টেনসর তৈরি (Tensor Creation)
টেনসর তৈরি করতে আপনি NumPy বা Theano ব্যবহার করতে পারেন।
NumPy তে টেনসর তৈরি:
import numpy as np # 1D টেনসর tensor_1d = np.array([1, 2, 3]) # 2D টেনসর (ম্যাট্রিক্স) tensor_2d = np.array([[1, 2], [3, 4]]) # 3D টেনসর tensor_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) print(tensor_1d) print(tensor_2d) print(tensor_3d)Theano তে টেনসর তৈরি:
import theano import theano.tensor as T # টেনসর তৈরি tensor_1d = T.vector('x') tensor_2d = T.matrix('y') print(tensor_1d) print(tensor_2d)
২. টেনসর আকার (Tensor Shape)
টেনসরের আকার বা ডাইমেনশন জানতে আপনি shape প্রপার্টি ব্যবহার করতে পারেন:
NumPy তে আকার বের করা:
print(tensor_2d.shape) # আউটপুট: (2, 2)Theano তে আকার বের করা:
print(tensor_2d.shape.eval()) # আউটপুট: (2, 2)
৩. টেনসর রিসাইজ (Resizing Tensor)
টেনসরের আকার পরিবর্তন করতে reshape অপারেশন ব্যবহার করা হয়:
NumPy তে রিসাইজ করা:
tensor_1d_resized = tensor_1d.reshape((3, 1)) print(tensor_1d_resized)Theano তে রিসাইজ করা:
tensor_reshaped = T.reshape(tensor_2d, (1, 4)) print(tensor_reshaped)
৪. টেনসর অ্যাক্সেস (Accessing Elements)
টেনসরের নির্দিষ্ট উপাদান বা স্লাইস এক্সেস করতে Indexing এবং Slicing ব্যবহার করা হয়:
NumPy তে অ্যাক্সেস:
print(tensor_2d[0, 1]) # প্রথম রো এর দ্বিতীয় উপাদান print(tensor_2d[:, 1]) # দ্বিতীয় কলামTheano তে অ্যাক্সেস:
print(tensor_2d[0, 1].eval())
৫. টেনসর মেমোরি ভিউ (Tensor Memory View)
NumPy এবং Theano টেনসর মেমোরি ভিউ হিসেবে কাজ করতে পারে, যেটা একই মেমোরি ব্যবহার করে বিভিন্ন ভিউতে ডেটা রিপ্রেজেন্টেশন করে। এর জন্য reshape এবং transpose ব্যবহার করা হয়।
NumPy তে:
tensor_transpose = tensor_2d.T print(tensor_transpose)Theano তে:
tensor_transpose = tensor_2d.T print(tensor_transpose)
৬. টেনসর অপারেশন (Tensor Operations)
টেনসরের ওপর বিভিন্ন গাণিতিক অপারেশন করা যায়:
Add (যোগ):
tensor_sum = tensor_2d + np.array([[5, 6], [7, 8]]) print(tensor_sum)Multiply (গুণ):
tensor_product = tensor_2d * np.array([[5, 6], [7, 8]]) print(tensor_product)Dot Product (ডট প্রোডাক্ট):
tensor_dot = np.dot(tensor_2d, tensor_2d.T) print(tensor_dot)
৭. টেনসর শিফট (Tensor Shifting)
টেনসরের উপাদানগুলি স্থানান্তর (shift) করতে roll ফাংশন ব্যবহার করা হয়:
NumPy তে:
tensor_shifted = np.roll(tensor_2d, shift=1, axis=1) print(tensor_shifted)
৮. টেনসর স্ট্যাকিং (Tensor Stacking)
একাধিক টেনসর একত্রে স্ট্যাক (stack) করতে concatenate বা stack ফাংশন ব্যবহার করা হয়:
NumPy তে:
tensor_stack = np.concatenate([tensor_2d, tensor_2d], axis=0) print(tensor_stack)Theano তে:
tensor_stack = T.concatenate([tensor_2d, tensor_2d], axis=0) print(tensor_stack)
৯. টেনসর অটোগ্র্যাডিয়েন্ট (Tensor Autogradient)
Theano অটোগ্র্যাডিয়েন্ট সমর্থন করে, যার মাধ্যমে গ্রেডিয়েন্ট (derivatives) গণনা করা সম্ভব হয়, যা ডিপ লার্নিং মডেল ট্রেনিংয়ের জন্য প্রয়োজনীয়।
Theano তে:
from theano import function, tensor x = tensor.dscalar('x') y = tensor.dscalar('y') z = x * y + x grad_z = tensor.grad(z, x) # গ্রেডিয়েন্ট f = function([x, y], grad_z) print(f(3, 4)) # আউটপুট: 4
সারাংশ:
টেনসর ম্যানিপুলেশন হল ডিপ লার্নিং, মেশিন লার্নিং এবং ডাটা সায়েন্সের জন্য অত্যন্ত গুরুত্বপূর্ণ একটি দক্ষতা। আপনি NumPy, SciPy, Theano এবং TensorFlow এর মতো লাইব্রেরির মাধ্যমে বিভিন্ন টেনসর অপারেশন করতে পারবেন, যেমন টেনসর তৈরি, আকার পরিবর্তন, যোগ, গুণ, ডট প্রোডাক্ট, শিফট, স্ট্যাকিং ইত্যাদি।
থিয়ানো টেনসর একটি মৌলিক গাণিতিক ধারণা যা থিয়ানো লাইব্রেরিতে ব্যবহৃত হয় এবং এটি ডিপ লার্নিং এবং মেশিন লার্নিং মডেলগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ। টেনসর হলো ডাটা বা ভেক্টর/ম্যাট্রিক্স এর একটি সাধারণায়িত রূপ যা একটি n-ডি (n-dimensional) অ্যারে হিসেবে কাজ করে।
টেনসর কী?
টেনসর হল একটি মাল্টি-ডাইমেনশনাল অ্যারে, যা আংশিকভাবে ম্যাট্রিক্স এবং ভেক্টরের এক বিস্তৃত রূপ। এটি মূলত এক বা একাধিক সংখ্যাকে ধারণ করতে পারে এবং ডিপ লার্নিং মডেলগুলির জন্য ইনপুট ডেটা (যেমন ইমেজ, টেক্সট, সংখ্যা, ইত্যাদি) এবং মডেল ওয়েট সংরক্ষণ করতে ব্যবহৃত হয়।
টেনসরের ধরন:
- স্কেলার (0D Tensor):
- একটি একক সংখ্যা (যেমন 5, 2.3, ইত্যাদি)। এটি 0D টেনসর হিসেবে পরিচিত।
- উদাহরণ:
x = 5
- ভেক্টর (1D Tensor):
- এটি একমাত্রার অ্যারে বা লিস্টের মতো। একমাত্রার অ্যারে হচ্ছে 1D টেনসর।
- উদাহরণ:
x = [1, 2, 3, 4]
- ম্যাট্রিক্স (2D Tensor):
- এটি একটি ২-মাত্রিক অ্যারে, যেখানে রো এবং কলাম থাকে। একে 2D টেনসর বলা হয়।
- উদাহরণ:
x = [[1, 2], [3, 4], [5, 6]]
- উচ্চ মাত্রার টেনসর (3D Tensor and beyond):
- এটি ৩ বা তার বেশি মাত্রার টেনসর, যেখানে ডিপ লার্নিংয়ে ব্যাচ ডেটা বা মাল্টি-চ্যানেল ইমেজ প্রতিনিধিত্ব করা হয়।
উদাহরণ:
x = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
থিয়ানোতে টেনসরের কাজের ধারা:
থিয়ানো টেনসর ব্যবহার করে গণনা করে, যেমন টেনসরের যোগফল, গুণফল, ট্রান্সপোজ, ডট প্রোডাক্ট ইত্যাদি অপারেশন। এখানে কিছু মৌলিক ধারণা ব্যাখ্যা করা হলো:
১. টেনসর ডিফাইন করা:
থিয়ানোতে টেনসর তৈরি করতে theano.tensor ব্যবহার করা হয়। আপনি সহজেই একটি টেনসর ঘোষণা করতে পারেন:
import theano
import theano.tensor as T
# 1D টেনসর
x = T.dvector('x') # ডাবল প্রিসিশন ভেক্টর
# 2D টেনসর
y = T.dmatrix('y') # ডাবল প্রিসিশন ম্যাট্রিক্স
এখানে T.dvector একটি 1D টেনসর এবং T.dmatrix একটি 2D টেনসর তৈরি করে।
২. টেনসর অপারেশন:
টেনসরের উপর গণনা বা অপারেশন করতে থিয়ানো টেনসর অপারেশন যেমন যোগফল, গুণফল ব্যবহার করা হয়। উদাহরণস্বরূপ:
z = x + y # x এবং y এর যোগফল
dot_product = T.dot(x, y) # x এবং y এর ডট প্রোডাক্ট
এখানে T.dot টেনসরের ডট প্রোডাক্টের অপারেশন করছে।
৩. ফাংশন তৈরি করা:
থিয়ানোতে ফাংশন তৈরি করা হয়, যেখানে টেনসরের গাণিতিক অপারেশনগুলো একত্রিত করে রেজাল্ট আনা হয়:
f = theano.function([x, y], z) # x, y ইনপুট নেবে এবং z আউটপুট দেবে
এটি একটি ফাংশন তৈরি করবে যা x এবং y ইনপুট নিয়ে z আউটপুট প্রদান করবে।
৪. ফাংশন রানের পর ফলাফল:
একবার ফাংশন তৈরি হলে, আপনি ইনপুট ডেটা দিয়ে ফাংশনটি রান করতে পারবেন:
import numpy as np
input_x = np.array([1, 2, 3])
input_y = np.array([[1, 2], [3, 4], [5, 6]])
result = f(input_x, input_y)
print(result)
এটি input_x এবং input_y দিয়ে যোগফল বা নির্ধারিত অপারেশন করবে এবং ফলাফল প্রদান করবে।
থিয়ানো টেনসর এর কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য:
- অটোমেটিক ডিফারেনশিয়েশন (Automatic Differentiation):
- থিয়ানো গ্রেডিয়েন্ট এবং ডেরিভেটিভস গণনা করতে পারে। এটি ডিপ লার্নিং মডেলের ট্রেনিংয়ে সহায়ক, যেখানে ব্যাকপ্রোপাগেশন পদ্ধতিতে গ্রেডিয়েন্ট প্রয়োজন হয়।
- GPU সাপোর্ট:
- থিয়ানো টেনসর অপারেশনগুলোকে GPU-তে চালানোর জন্য সক্ষম, যা বড় ডেটাসেট এবং মডেল প্রশিক্ষণের জন্য দ্রুততর গাণিতিক অপারেশন করতে সহায়ক।
- ফাংশন অপটিমাইজেশন:
- থিয়ানো কোডের কার্যকারিতা এবং গাণিতিক অপারেশনগুলির অপটিমাইজেশন করতে পারে, যাতে কোড দ্রুত এবং কার্যকর হয়।
টেনসর অপারেশন উদাহরণ:
import numpy as np
import theano
import theano.tensor as T
# টেনসর ডিফাইন করা
x = T.dmatrix('x')
y = T.dmatrix('y')
# অপারেশন তৈরি করা
z = x + y
# ফাংশন তৈরি করা
f = theano.function([x, y], z)
# ইনপুট ভ্যালু
input_x = np.array([[1, 2], [3, 4]])
input_y = np.array([[5, 6], [7, 8]])
# ফাংশন রানে ফলাফল
result = f(input_x, input_y)
print(result)
আউটপুট:
[[ 6. 8.]
[10. 12.]]
এখানে x এবং y এর যোগফল করা হয়েছে এবং ফাংশনের মাধ্যমে আউটপুট প্রদান করা হয়েছে।
সারাংশ:
- টেনসর হল একটি মাল্টি-ডাইমেনশনাল অ্যারে যা ডিপ লার্নিং এবং মেশিন লার্নিংয়ের বিভিন্ন গাণিতিক অপারেশন করার জন্য ব্যবহৃত হয়।
- থিয়ানো টেনসর অপারেশনগুলো দ্রুত এবং কার্যকরভাবে GPU তে সম্পাদন করতে সক্ষম।
- ফাংশন তৈরি এবং অটোমেটিক ডিফারেনশিয়েশন থিয়ানো টেনসরের মাধ্যমে সম্ভব, যা ডিপ লার্নিং মডেলের ট্রেনিংয়ের জন্য অপরিহার্য।
টেনসর তৈরি, রিসাইজ, এবং ম্যানিপুলেশন হল ডিপ লার্নিং এবং সায়েন্টিফিক কম্পিউটিংয়ে একটি গুরুত্বপূর্ণ অংশ। টেনসর মূলত একটি মাল্টিডাইমেনশনাল অ্যারে বা ম্যাট্রিক্স যা বিভিন্ন ডেটা ধরন সংরক্ষণ করতে ব্যবহৃত হয়। পাইটন লাইব্রেরি NumPy এবং Theano এর মাধ্যমে টেনসর তৈরি এবং ম্যানিপুলেশন করা যেতে পারে।
এখানে NumPy এবং Theano ব্যবহার করে টেনসর তৈরি, রিসাইজ এবং ম্যানিপুলেশনের প্রক্রিয়া আলোচনা করা হলো।
১. NumPy ব্যবহার করে টেনসর তৈরি, রিসাইজ এবং ম্যানিপুলেশন:
NumPy হল পাইটনের একটি শক্তিশালী লাইব্রেরি যা টেনসর বা মাল্টিডাইমেনশনাল অ্যারে তৈরি এবং ম্যানিপুলেট করার জন্য ব্যবহৃত হয়। এখানে NumPy এর মাধ্যমে টেনসর তৈরি, রিসাইজ এবং ম্যানিপুলেশন সম্পর্কিত উদাহরণ দেওয়া হলো।
টেনসর তৈরি:
import numpy as np
# 1D টেনসর তৈরি
tensor_1d = np.array([1, 2, 3, 4])
print("1D Tensor:")
print(tensor_1d)
# 2D টেনসর তৈরি (ম্যাট্রিক্স)
tensor_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("\n2D Tensor:")
print(tensor_2d)
# 3D টেনসর তৈরি
tensor_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("\n3D Tensor:")
print(tensor_3d)
টেনসর রিসাইজ:
NumPy তে টেনসর রিসাইজ করার জন্য reshape() ফাংশন ব্যবহার করা হয়।
# টেনসর রিসাইজ করা
tensor_resized = tensor_2d.reshape(3, 2)
print("\nResized Tensor (3x2):")
print(tensor_resized)
টেনসর ম্যানিপুলেশন:
টেনসর যোগ (Addition):
tensor_add = tensor_2d + np.array([[10, 10, 10], [10, 10, 10]]) print("\nTensor Addition:") print(tensor_add)টেনসর গুণ (Multiplication):
tensor_mult = tensor_2d * 2 print("\nTensor Multiplication (by 2):") print(tensor_mult)টেনসর ট্রান্সপোজ (Transpose):
tensor_transpose = tensor_2d.T print("\nTensor Transpose:") print(tensor_transpose)টেনসরের শেপ (Shape):
print("\nTensor Shape:") print(tensor_2d.shape)
২. Theano ব্যবহার করে টেনসর তৈরি, রিসাইজ এবং ম্যানিপুলেশন:
Theano একটি গাণিতিক লাইব্রেরি যা গাণিতিক অপারেশন পরিচালনা করতে সক্ষম এবং এটি GPU ব্যবহার করতে পারে। Theano তে টেনসর তৈরি এবং ম্যানিপুলেশন এর জন্য tensor এবং function ব্যবহার করা হয়।
টেনসর তৈরি:
import theano
import theano.tensor as T
import numpy as np
# 1D টেনসর তৈরি
tensor_1d_theano = T.dvector('tensor_1d')
tensor_1d_value = np.array([1, 2, 3, 4])
# 2D টেনসর তৈরি
tensor_2d_theano = T.dmatrix('tensor_2d')
tensor_2d_value = np.array([[1, 2, 3], [4, 5, 6]])
print("\nTheano 1D Tensor:")
print(tensor_1d_value)
print("\nTheano 2D Tensor:")
print(tensor_2d_value)
টেনসর রিসাইজ:
Theano তে টেনসর রিসাইজ করার জন্য সরাসরি কোনো reshape ফাংশন নেই, তবে আপনি dimshuffle বা reshape ব্যবহার করতে পারেন।
# Theano তে reshape করা
reshaped_tensor = tensor_2d_theano.reshape((3, 2))
print("\nReshaped Tensor (3x2):")
print(reshaped_tensor)
টেনসর ম্যানিপুলেশন:
টেনসর যোগ (Addition):
tensor_add_theano = tensor_2d_theano + np.array([[10, 10, 10], [10, 10, 10]]) print("\nTensor Addition in Theano:") print(tensor_add_theano)টেনসর গুণ (Multiplication):
tensor_mult_theano = tensor_2d_theano * 2 print("\nTensor Multiplication in Theano (by 2):") print(tensor_mult_theano)টেনসরের ট্রান্সপোজ (Transpose):
tensor_transpose_theano = tensor_2d_theano.T print("\nTensor Transpose in Theano:") print(tensor_transpose_theano)টেনসরের শেপ (Shape):
print("\nTheano Tensor Shape:") print(tensor_2d_theano.shape)
৩. সারাংশ:
- NumPy এবং Theano তে টেনসর তৈরি, রিসাইজ এবং ম্যানিপুলেশন সম্ভব। NumPy সাধারণভাবে CPU ভিত্তিক কাজের জন্য ব্যবহৃত হয়, যেখানে Theano GPU সাপোর্টসহ গাণিতিক অপারেশন দ্রুত করতে পারে।
- NumPy এ
reshape(),transpose()এবং অন্যান্য গাণিতিক অপারেশন যেমন যোগ এবং গুণ ব্যবহার করা যায়। - Theano তে টেনসর তৈরি এবং পরিচালনার জন্য
theano.tensorব্যবহার করা হয়, এবংreshape()বাdimshuffle()ব্যবহার করে টেনসর রিসাইজ করা যায়।
এই টুলগুলি ডিপ লার্নিং এবং বৈজ্ঞানিক কম্পিউটিং কাজগুলির জন্য অত্যন্ত কার্যকরী।
টেনসর (Tensor) হল একটি মৌলিক গাণিতিক গঠন যা থিয়ানো, PyTorch, TensorFlow এর মতো লাইব্রেরি গুলিতে ডিপ লার্নিং এবং গাণিতিক কম্পিউটেশন কার্যক্রমে ব্যবহৃত হয়। টেনসরগুলি মূলত মাল্টি-ডাইমেনশনাল অ্যারে (Multi-dimensional array) হিসেবে কাজ করে এবং Indexing, Slicing, এবং Broadcasting এর মাধ্যমে তাদের উপাদানগুলির সাথে কাজ করা যায়। এই ধারণাগুলি বিশেষভাবে ডিপ লার্নিং মডেলগুলির প্রশিক্ষণ এবং বিশ্লেষণের জন্য গুরুত্বপূর্ণ।
১. টেনসর Indexing
টেনসর Indexing এর মাধ্যমে নির্দিষ্ট উপাদান (element) বা উপাদানগুলোর সাবসেট (subset) অ্যাক্সেস করা যায়। এটি একক উপাদান থেকে শুরু করে, একাধিক উপাদান বা সেগমেন্ট পর্যন্ত কাজ করতে পারে।
উদাহরণ:
ধরা যাক, আমাদের একটি 2D টেনসর (ম্যাট্রিক্স) আছে:
import numpy as np
tensor = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
এখন, বিভিন্ন ধরনের Indexing করা যেতে পারে:
একটি নির্দিষ্ট উপাদান অ্যাক্সেস:
- [row, column] এর মাধ্যমে আমরা নির্দিষ্ট উপাদান অ্যাক্সেস করতে পারি:
print(tensor[1, 2]) # আউটপুট: 6 (দ্বিতীয় রো, তৃতীয় কলাম)একটি রো (Row) নির্বাচন করা:
- নির্দিষ্ট রো অ্যাক্সেস করতে:
print(tensor[0]) # আউটপুট: [1 2 3] (প্রথম রো)একটি কলাম (Column) নির্বাচন করা:
- কলাম নির্বাচনের জন্য:
print(tensor[:, 1]) # আউটপুট: [2 5 8] (দ্বিতীয় কলাম)
২. টেনসর Slicing
Slicing এর মাধ্যমে টেনসর থেকে একাধিক উপাদান একত্রে নির্বাচন করা সম্ভব। এটি ঠিক একটি সেগমেন্ট (sub-array) নির্বাচনের মতো কাজ করে, যেখানে আপনি শুরু এবং শেষ ইনডেক্স নির্ধারণ করতে পারেন।
উদাহরণ:
একটি সাবসেট নির্বাচন:
- টেনসরের একটি নির্দিষ্ট অংশ বা সেগমেন্ট নির্বাচন করতে স্লাইস ব্যবহার করা হয়:
print(tensor[0:2, 1:3]) # আউটপুট: [[2 3] [5 6]] (প্রথম দুটি রো এবং দ্বিতীয় ও তৃতীয় কলাম)কলামগুলোর স্লাইসিং:
- স্লাইসিংয়ের মাধ্যমে একটি কলামের অংশ নির্বাচন করা:
print(tensor[:, 0:2]) # আউটপুট: [[1 2] [4 5] [7 8]] (প্রথম দুটি কলাম)সব রো এবং কলাম সিলেক্ট করা:
- পুরো টেনসর নির্বাচনের জন্য:
print(tensor[:]) # আউটপুট: [[1 2 3] [4 5 6] [7 8 9]] (পুরো টেনসর)
৩. টেনসর Broadcasting
Broadcasting হল একটি শক্তিশালী বৈশিষ্ট্য যা কমপ্লেক্স অপারেশনগুলির জন্য ব্যবহার করা হয়, যেমন ছোট আকারের টেনসরের উপাদানগুলিকে বড় আকারের টেনসরের সাথে প্রয়োগ করা। এটি টেনসরের আকারের অমিল থাকা সত্ত্বেও উপাদানগুলোকে একসাথে অপারেট করতে সাহায্য করে।
উদাহরণ:
ধরা যাক, আমাদের একটি 2D টেনসর এবং একটি 1D টেনসর আছে:
import numpy as np
tensor2d = np.array([[1, 2, 3], [4, 5, 6]])
tensor1d = np.array([10, 20, 30])
এখন, broadcasting এর মাধ্যমে আমরা এই দুইটি টেনসরের উপর অপারেশন করতে পারব:
অপারেশন চালানো (Broadcasting):
tensor1dকেtensor2dএর সাথে যোগ করা, এখানেtensor1dএর আকার 1D হলেও এটি broadcast হয়েtensor2dএর সাথে যোগ হবে:
result = tensor2d + tensor1d print(result) # আউটপুট: [[11 22 33] [14 25 36]]একটি স্কালার যোগ করা:
- আপনি broadcasting ব্যবহার করে একটি স্কালার মানকে সমস্ত উপাদানে যোগ করতে পারেন:
result = tensor2d + 5 print(result) # আউটপুট: [[6 7 8] [9 10 11]]
Broadcasting এর কাজের প্রক্রিয়া:
- একই আকারের টেনসর: যদি দুইটি টেনসরের আকার একই হয়, তবে সহজেই তাদের সাথে অপারেশন করা যায়।
- একটি টেনসর বড় এবং অন্যটি ছোট: যদি একটি টেনসর বড় এবং অন্যটি ছোট হয় (যেমন 1D টেনসর আর 2D টেনসর), তবে ছোট টেনসরটির আকার বড় টেনসরের আকারে সম্প্রসারিত হয়, তবে তাদের মধ্যে একই উপাদান রেখে।
টেনসর Broadcasting এর নিয়মাবলী:
- যদি আকার একে অপরের সাথে সামঞ্জস্যপূর্ণ না হয়, তবে সবচেয়ে ছোট আকার সম্প্রসারিত হয়।
- এটি শুধুমাত্র তখন কাজ করে যখন একটি টেনসরের আকার একটির সাথে আরেকটি টেনসরের আকারের সাথে মিলে যায়।
সারাংশ:
- Indexing: নির্দিষ্ট উপাদান বা অংশ নির্বাচন করার জন্য ব্যবহৃত হয়।
- Slicing: টেনসরের একাধিক উপাদান বা সেগমেন্ট নির্বাচনের জন্য ব্যবহৃত হয়।
- Broadcasting: একটি ছোট টেনসরকে একটি বড় টেনসরের সাথে সঠিকভাবে সমন্বয় করার প্রক্রিয়া, যাতে অপারেশনগুলো কার্যকরভাবে সম্পন্ন করা যায়।
এই তিনটি ধারণা ডিপ লার্নিং মডেল তৈরিতে খুবই গুরুত্বপূর্ণ, কারণ আপনি বিভিন্ন আকারের টেনসরের সাথে অপারেশন করার মাধ্যমে মডেল প্রশিক্ষণ, ডাটা প্রসেসিং এবং বিভিন্ন ক্যালকুলেশন করতে পারবেন।
Matrix Multiplication এবং Linear Algebra অপারেশন গুলি গাণিতিক অ্যালগরিদম এবং মেশিন লার্নিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ। এগুলি ব্যবহার করে বিভিন্ন ডিপ লার্নিং এবং গাণিতিক সমস্যা সমাধান করা হয়। এখানে Matrix Multiplication এবং অন্যান্য Linear Algebra অপারেশন সম্পর্কে বিস্তারিত আলোচনা করা হলো।
১. Matrix Multiplication (ম্যাট্রিক্স গুণন)
Matrix multiplication (অথবা Dot Product) দুটি ম্যাট্রিক্সের মধ্যে একটি গুরুত্বপূর্ণ গাণিতিক অপারেশন। এটি এমন একটি অপারেশন যা দুটি ম্যাট্রিক্সের সারি এবং কলামের উপাদান গুণ করে তাদের যোগফল তৈরি করে। ম্যাট্রিক্স গুণের জন্য কিছু শর্ত আছে:
- ম্যাট্রিক্স A এর কলামের সংখ্যা হতে হবে B ম্যাট্রিক্সের সারির সংখ্যা।
- যদি A এর আকার হয় এবং B এর আকার হয় , তাহলে A × B এর আকার হবে ।
Matrix Multiplication Formula:
ধরা যাক, A এর আকার এবং B এর আকার , তাহলে তাদের গুণফল C হবে:
এখানে:
- হলো C ম্যাট্রিক্সের -থ সারি এবং -থ কলামের উপাদান।
- A এর -থ সারি এবং B এর -থ কলামের উপাদান গুণফল যোগ করা হয়।
NumPy ব্যবহার করে Matrix Multiplication:
Python এর NumPy লাইব্রেরি ব্যবহার করে ম্যাট্রিক্স গুণ করা যায় খুব সহজে। নিচে একটি উদাহরণ দেখানো হলো:
import numpy as np
# দুইটি ম্যাট্রিক্স A এবং B তৈরি করা
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# ম্যাট্রিক্স গুণ
C = np.dot(A, B)
print(C)
এখানে np.dot(A, B) ম্যাট্রিক্স A এবং B এর গুণফল হিসেবে ম্যাট্রিক্স C রিটার্ন করবে। আউটপুট হবে:
[[19 22]
[43 50]]
২. Linear Algebra অপারেশন (লিনিয়ার অ্যালজেব্রা অপারেশন)
Linear Algebra অপারেশনগুলি গাণিতিক ও বৈজ্ঞানিক সমস্যা সমাধানে ব্যবহার করা হয়, বিশেষত ডিপ লার্নিং এবং মেশিন লার্নিং ক্ষেত্রে। কিছু গুরুত্বপূর্ণ লিনিয়ার অ্যালজেব্রা অপারেশন নিম্নরূপ:
১. Determinant (ডিটারমিন্যান্ট):
ডিটারমিন্যান্ট একটি স্কেলার মান, যা একটি ম্যাট্রিক্সের জন্য একটি গাণিতিক পরিমাপ হিসেবে কাজ করে। এটি ম্যাট্রিক্সের বৈশিষ্ট্য সম্পর্কে গুরুত্বপূর্ণ তথ্য দেয়। ২×২ ম্যাট্রিক্সের ডিটারমিন্যান্ট হিসাব করা হয়:
NumPy দিয়ে ডিটারমিন্যান্ট বের করা:
det_A = np.linalg.det(A)
print(det_A)
২. Eigenvalues and Eigenvectors (আইজেনভ্যালু এবং আইজেনভেক্টর):
আইজেনভ্যালু এবং আইজেনভেক্টর একটি ম্যাট্রিক্সের জন্য একটি গুরুত্বপূর্ণ গাণিতিক বৈশিষ্ট্য। এটি matrix diagonalization এবং PCA (Principal Component Analysis) এর মতো প্রক্রিয়াগুলির জন্য গুরুত্বপূর্ণ।
NumPy দিয়ে Eigenvalues এবং Eigenvectors বের করা:
eigenvalues, eigenvectors = np.linalg.eig(A)
print("Eigenvalues:", eigenvalues)
print("Eigenvectors:", eigenvectors)
৩. Matrix Inversion (ম্যাট্রিক্স ইনভার্স):
ম্যাট্রিক্স ইনভার্স একটি ম্যাট্রিক্সের অপরূপ যা মুলতঃ তাকে উল্টো করে বা বিপরীত ম্যাট্রিক্স তৈরি করতে ব্যবহৃত হয়। যদি A একটি ইনভার্সযোগ্য ম্যাট্রিক্স হয়, তাহলে A × A⁻¹ = I, যেখানে I একটি ইউনিট ম্যাট্রিক্স।
NumPy দিয়ে ইনভার্স বের করা:
A_inv = np.linalg.inv(A)
print(A_inv)
৪. Singular Value Decomposition (SVD):
SVD একটি ম্যাট্রিক্সকে তিনটি ম্যাট্রিক্সের গুণফলে পরিণত করে: U, Σ (Sigma), এবং V। এটি ম্যাট্রিক্সের low-rank approximation এর জন্য ব্যবহৃত হয় এবং ডিপ লার্নিংয়ে গুরুত্বপূর্ণ ভূমিকা রাখে।
NumPy দিয়ে SVD বের করা:
U, S, V = np.linalg.svd(A)
print("U:", U)
print("S:", S)
print("V:", V)
৫. Matrix Transpose (ম্যাট্রিক্স ট্রান্সপোজ):
ম্যাট্রিক্স ট্রান্সপোজ একটি ম্যাট্রিক্সের সারি এবং কলাম পরিবর্তন করে। যদি A একটি ম্যাট্রিক্স হয়, তবে Aᵀ এর আকার হবে A এর আকারের বিপরীত।
NumPy দিয়ে ম্যাট্রিক্স ট্রান্সপোজ:
A_T = np.transpose(A)
print(A_T)
৩. আরও লিনিয়ার অ্যালজেব্রা অপারেশন
- Dot Product: দুটি ভেক্টরের গুণফল। সাধারণত numpy.dot() দিয়ে করা হয়।
- Cross Product: দুটি ভেক্টরের ক্রস প্রডাক্ট, যা নতুন একটি ভেক্টর উৎপন্ন করে।
- Matrix Rank: একটি ম্যাট্রিক্সের র্যাংক এটি কতটুকু তথ্য ধারণ করে তা প্রকাশ করে।
NumPy দিয়ে কিছু লিনিয়ার অ্যালজেব্রা অপারেশন:
import numpy as np
# ম্যাট্রিক্স A
A = np.array([[1, 2], [3, 4]])
# ম্যাট্রিক্স ট্রান্সপোজ
print("Transpose of A:\n", np.transpose(A))
# ম্যাট্রিক্স ইনভার্স
print("Inverse of A:\n", np.linalg.inv(A))
# ডিটারমিন্যান্ট
print("Determinant of A:", np.linalg.det(A))
# Eigenvalues এবং Eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(A)
print("Eigenvalues:", eigenvalues)
print("Eigenvectors:\n", eigenvectors)
সারাংশ:
- Matrix Multiplication একটি মৌলিক অপারেশন যা দুটি ম্যাট্রিক্সের গুণফল বের করার জন্য ব্যবহৃত হয়, এবং এটি ডিপ লার্নিং মডেল তৈরিতে গুরুত্বপূর্ণ।
- Linear Algebra অপারেশনগুলি যেমন Determinant, Eigenvalues, SVD, Matrix Inversion এবং Transpose ম্যাট্রিক্স এবং ভেক্টরগুলির বিভিন্ন বৈশিষ্ট্য বিশ্লেষণ করতে ব্যবহৃত হয়।
- NumPy লাইব্রেরি ব্যবহার করে এগুলি খুব সহজেই করা যায় এবং এটি ডিপ লার্নিং, মেশিন লার্নিং এবং গাণিতিক বিশ্লেষণে গুরুত্বপূর্ণ ভূমিকা রাখে।
Read more