PyTorch একটি শক্তিশালী লাইব্রেরি যা টেনসর নামক ডেটা স্ট্রাকচার ব্যবহার করে। টেনসর হল একটি মাল্টি-ডাইমেনশনাল অ্যারে (যেমন, স্কেলার, ভেক্টর, ম্যাট্রিক্স, বা উচ্চ-ডাইমেনশনাল ডেটা) যা মেশিন লার্নিং এবং ডিপ লার্নিং মডেল তৈরির জন্য ব্যবহৃত হয়। PyTorch টেনসর ম্যানিপুলেশন এর মাধ্যমে আপনি সহজেই ডেটা প্রক্রিয়াকরণ করতে পারবেন।
নিচে PyTorch টেনসর ম্যানিপুলেশনের কিছু গুরুত্বপূর্ণ ফিচার এবং অপারেশন নিয়ে আলোচনা করা হলো।
১. PyTorch টেনসর তৈরি করা
PyTorch তে টেনসর তৈরি করার জন্য torch.tensor() ফাংশন ব্যবহার করা হয়। এছাড়া, torch.zeros(), torch.ones(), torch.rand() ইত্যাদি ব্যবহার করে বিভিন্ন ধরনের টেনসর তৈরি করা যায়।
টেনসর তৈরি করার উদাহরণ:
import torch
# একটি সাধারণ টেনসর তৈরি
x = torch.tensor([1, 2, 3, 4])
print(x)
# একটি 2D টেনসর (ম্যাট্রিক্স) তৈরি
y = torch.tensor([[1, 2], [3, 4], [5, 6]])
print(y)
# একটি টেনসর যা সব একে পূর্ণ
z = torch.ones(3, 3)
print(z)
# একটি টেনসর যা সব শূন্যে পূর্ণ
a = torch.zeros(2, 2)
print(a)
# রেন্ডম মান সহ টেনসর
b = torch.rand(3, 2)
print(b)
২. টেনসরের আকার এবং ডাইমেনশন চেক করা
PyTorch এ আপনি টেনসরের আকার (shape) এবং ডাইমেনশন চেক করতে size() এবং ndimension() ফাংশন ব্যবহার করতে পারেন।
টেনসরের আকার এবং ডাইমেনশন চেক করা:
# টেনসরের আকার বের করা
print(x.size()) # আউটপুট: torch.Size([4])
# টেনসরের ডাইমেনশন বের করা
print(y.ndimension()) # আউটপুট: 2 (2D টেনসর)
৩. টেনসরের অপারেশন
PyTorch এ অনেক ধরনের অপারেশন উপলব্ধ যা টেনসরের উপর প্রয়োগ করা যায়। যেমন, যোগ, বিয়োগ, গুণ, ভাগ, ট্রান্সপোজ, মেমরি অপটিমাইজেশন ইত্যাদি।
টেনসর অপারেশন এর উদাহরণ:
# দুইটি টেনসরের যোগফল
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = x + y
print(z) # আউটপুট: tensor([5, 7, 9])
# গুণফল
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = x * y
print(z) # আউটপুট: tensor([4, 10, 18])
# স্কেলার গুণফল
x = torch.tensor([1, 2, 3])
z = x * 2
print(z) # আউটপুট: tensor([2, 4, 6])
# ট্রান্সপোজ করা
x = torch.tensor([[1, 2], [3, 4]])
z = x.T
print(z) # আউটপুট: tensor([[1, 3], [2, 4]])
# মেট্রিক্স গুণফল
a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])
z = torch.mm(a, b)
print(z) # আউটপুট: tensor([[19, 22], [43, 50]])
৪. টেনসরের রিসাইজিং এবং রিশেপিং
PyTorch তে টেনসরের আকার পরিবর্তন বা পুনঃআকৃতি তৈরি করতে view(), reshape(), unsqueeze() এবং squeeze() ফাংশন ব্যবহার করা হয়।
টেনসরের আকার পরিবর্তন:
# একটি 1D টেনসর থেকে 2D টেনসর তৈরি
x = torch.tensor([1, 2, 3, 4, 5, 6])
y = x.view(2, 3)
print(y) # আউটপুট: tensor([[1, 2, 3], [4, 5, 6]])
# reshape ব্যবহার করা
z = x.reshape(3, 2)
print(z) # আউটপুট: tensor([[1, 2], [3, 4], [5, 6]])
# টেনসরের আকার এক্সট্রা ডাইমেনশন যোগ করা
w = x.unsqueeze(0) # টেনসরের আকার হবে [1, 6]
print(w) # আউটপুট: tensor([[1, 2, 3, 4, 5, 6]])
# টেনসরের আকার থেকে এক্সট্রা ডাইমেনশন সরানো
u = w.squeeze(0) # এটি আবার 1D টেনসরে পরিণত হবে
print(u) # আউটপুট: tensor([1, 2, 3, 4, 5, 6])
৫. টেনসরের ডাটা টাইপ পরিবর্তন
টেনসরের ডাটা টাইপ পরিবর্তন করতে float(), int(), long() ইত্যাদি ফাংশন ব্যবহার করা যায়।
ডাটা টাইপ পরিবর্তন:
x = torch.tensor([1, 2, 3], dtype=torch.int32)
print(x)
# ডাটা টাইপ পরিবর্তন
y = x.float()
print(y) # আউটপুট: tensor([1., 2., 3.])
৬. CUDA সহ টেনসরের ব্যবহার
PyTorch এর মাধ্যমে আপনি GPU তে টেনসর চালাতে পারেন। এর জন্য cuda() ফাংশন ব্যবহার করা হয়। CUDA-enabled টেনসরগুলি GPU তে রান করতে সক্ষম।
CUDA ব্যবহার:
# টেনসর CPU তে তৈরি করা
x = torch.tensor([1, 2, 3])
print(x.device) # আউটপুট: cpu
# টেনসর GPU তে স্থানান্তর করা
x = x.cuda()
print(x.device) # আউটপুট: cuda:0 (GPU তে)
# CUDA সাপোর্ট চেক করা
if torch.cuda.is_available():
print("CUDA is available!")
else:
print("CUDA is not available.")
সারাংশ
- টেনসর PyTorch এর অন্যতম প্রধান ডেটা স্ট্রাকচার যা আপনাকে মাল্টি-ডাইমেনশনাল অ্যারে ব্যবহার করার সুবিধা দেয়।
- PyTorch তে টেনসর ম্যানিপুলেশন অপারেশনগুলোর মধ্যে যোগফল, বিয়োগ, গুণফল, ভাগ, ট্রান্সপোজ ইত্যাদি অন্তর্ভুক্ত রয়েছে।
- রিসাইজিং, রিশেপিং, ডাটা টাইপ পরিবর্তন, এবং CUDA ব্যবহার করেও আপনি টেনসরের সাথে আরও কার্যকরীভাবে কাজ করতে পারবেন।
এই ফিচারগুলো আপনাকে ডিপ লার্নিং মডেল তৈরির জন্য দ্রুত এবং কার্যকরী কোড লেখার সুযোগ দেয়।
টেনসর হলো ডিপ লার্নিং এবং মেশিন লার্নিংয়ের জন্য একটি অত্যন্ত গুরুত্বপূর্ণ ডেটা স্ট্রাকচার। এটি এক বা একাধিক মাত্রার অ্যারে হিসেবে কাজ করে এবং PyTorch এ এটি মূল ডেটা স্ট্রাকচার হিসেবে ব্যবহৃত হয়। টেনসরকে আপনি সহজে এক বা একাধিক মাত্রা (dimensional) দিয়ে তৈরি করতে পারেন, যা সাধারণত স্কেলার, ভেক্টর, ম্যাট্রিক্স, এবং মাল্টি-ডাইমেনশনাল অ্যারে হিসেবে ব্যবহার করা হয়।
১. PyTorch এ টেনসর তৈরি করা
PyTorch এ টেনসর তৈরি করার জন্য মূলত torch.Tensor() অথবা torch.tensor() ব্যবহার করা হয়। এছাড়া কিছু টেনসর তৈরি করার অন্যান্য মেথডও রয়েছে, যেমন torch.zeros(), torch.ones(), torch.rand(), torch.arange(), torch.eye() ইত্যাদি।
বিভিন্ন ধরনের টেনসর তৈরি করার পদ্ধতি:
স্কেলার টেনসর তৈরি করা: একটি স্কেলার হল একমাত্রার টেনসর, যেখানে একটি মাত্রা থাকে এবং একটি একক মান থাকে।
import torch scalar_tensor = torch.tensor(5) # scalar tensor with a single value print(scalar_tensor)ভেক্টর টেনসর তৈরি করা: একটি ভেক্টর টেনসর হল একমাত্রার অ্যারে যা একাধিক উপাদান ধারণ করে। উদাহরণস্বরূপ:
vector_tensor = torch.tensor([1, 2, 3, 4, 5]) # 1D tensor print(vector_tensor)ম্যাট্রিক্স টেনসর তৈরি করা: একটি ম্যাট্রিক্স টেনসর হল দুটি মাত্রার টেনসর, যা সারি এবং কলাম ধারণ করে।
matrix_tensor = torch.tensor([[1, 2], [3, 4], [5, 6]]) # 2D tensor print(matrix_tensor)মাল্টি-ডাইমেনশনাল টেনসর তৈরি করা: একটি মাল্টি-ডাইমেনশনাল টেনসর হল যে কোন সংখ্যক মাত্রার টেনসর। উদাহরণস্বরূপ:
multi_dim_tensor = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) # 3D tensor print(multi_dim_tensor)
টেনসর তৈরি করার অন্যান্য পদ্ধতি:
torch.zeros(): এটি একটি টেনসর তৈরি করে, যার সমস্ত উপাদান শূন্য (zero) থাকে।zeros_tensor = torch.zeros(2, 3) # 2x3 tensor with zeros print(zeros_tensor)torch.ones(): এটি একটি টেনসর তৈরি করে, যার সমস্ত উপাদান এক (one) থাকে।ones_tensor = torch.ones(3, 4) # 3x4 tensor with ones print(ones_tensor)torch.rand(): এটি একটি টেনসর তৈরি করে, যার উপাদানগুলো 0 থেকে 1 এর মধ্যে র্যান্ডমভাবে মান দেওয়া হয়।random_tensor = torch.rand(2, 2) # 2x2 tensor with random values between 0 and 1 print(random_tensor)torch.arange(): এটি একটি টেনসর তৈরি করে যা একটি নির্দিষ্ট রেঞ্জের মান ধারণ করে।arange_tensor = torch.arange(0, 10, 2) # tensor with values from 0 to 10 with step 2 print(arange_tensor)torch.eye(): এটি একটি ইউনিট ম্যাট্রিক্স (identity matrix) তৈরি করে।identity_tensor = torch.eye(3) # 3x3 identity matrix print(identity_tensor)
২. টেনসর এর বৈশিষ্ট্য
একটি টেনসর সাধারণত নীচের বৈশিষ্ট্যগুলো ধারণ করে:
আকৃতি (Shape): টেনসরের আকৃতি হল তার মাত্রাগুলোর সংখ্যা এবং প্রতিটি মাত্রার আকার। একে
shapeহিসেবে উল্লেখ করা হয়। আপনিtensor.shapeব্যবহার করে টেনসরের আকৃতি দেখতে পারেন।print(tensor.shape)ডেটা টাইপ (Data Type): টেনসরের ডেটা টাইপ সেট করা থাকে যেমন int, float, ইত্যাদি। আপনি
tensor.dtypeব্যবহার করে টেনসরের ডেটা টাইপ দেখতে পারেন।print(tensor.dtype)ডিভাইস (Device): টেনসরটি কোথায় সংরক্ষিত তা
deviceদ্বারা নির্ধারণ করা হয়, যেমন CPU বা GPU। আপনিtensor.deviceব্যবহার করে ডিভাইস দেখতে পারেন।print(tensor.device)টেনসরের আকার পরিবর্তন (Reshaping): টেনসরের আকৃতি পরিবর্তন করতে
tensor.view()বাtensor.reshape()ব্যবহার করা হয়।reshaped_tensor = tensor.view(2, 3) print(reshaped_tensor)- অপারেশন (Operations): টেনসরগুলোর উপর বিভিন্ন গণনা অপারেশন যেমন যোগ, গুণফল, গড়, ম্যাক্সিমাম ইত্যাদি করা যায়। উদাহরণস্বরূপ:
যোগফল (Addition):
tensor1 = torch.tensor([1, 2, 3]) tensor2 = torch.tensor([4, 5, 6]) sum_tensor = tensor1 + tensor2 print(sum_tensor)গুণফল (Multiplication):
product_tensor = tensor1 * tensor2 print(product_tensor)
কপি (Copying): টেনসর কপি করতে
tensor.clone()বাtensor.detach()ব্যবহার করা হয়।cloned_tensor = tensor.clone() print(cloned_tensor)
সারাংশ
টেনসর PyTorch এবং ডিপ লার্নিংয়ের জন্য একটি অত্যন্ত গুরুত্বপূর্ণ ডেটা স্ট্রাকচার। এটি এক বা একাধিক মাত্রায় ডেটা ধারণ করতে সক্ষম, এবং বিভিন্ন পদ্ধতিতে তৈরি করা যায় যেমন torch.tensor(), torch.zeros(), torch.ones() ইত্যাদি। টেনসরের আকৃতি, ডেটা টাইপ, ডিভাইস, অপারেশন এবং আকার পরিবর্তন সবই খুব সহজে পরিচালনা করা যায় PyTorch এর মাধ্যমে।
PyTorch-এ টেনসরের আকার পরিবর্তন করা, বিশেষত রিসাইজ এবং reshaping অপারেশনগুলি, ডিপ লার্নিং মডেল তৈরির সময় খুবই গুরুত্বপূর্ণ। এই অপারেশনগুলি টেনসরগুলির আকার বা মাত্রা পরিবর্তন করতে সাহায্য করে, যাতে ডেটা বা মডেল লেয়ারের জন্য উপযুক্ত আকারে ডেটা ফিড করা যায়।
১. টেনসর রিসাইজ (Resize)
Resize অপারেশন একটি টেনসরের আকার পরিবর্তন করার জন্য ব্যবহৃত হয়। PyTorch এ টেনসরের আকার পরিবর্তন করার জন্য torch.nn.functional.interpolate() বা torch.resize() (ভিন্ন ধরনের আকারের জন্য) ব্যবহার করা হয়।
টেনসর রিসাইজ (Resize) উদাহরণ:
import torch
import torch.nn.functional as F
# 3x3 টেনসর তৈরি
tensor = torch.randn(3, 3)
print("Original Tensor:")
print(tensor)
# টেনসর রিসাইজ
resized_tensor = F.interpolate(tensor.unsqueeze(0).unsqueeze(0), size=(6, 6), mode='bilinear', align_corners=False)
print("Resized Tensor:")
print(resized_tensor.squeeze())
এখানে, unsqueeze(0).unsqueeze(0) দিয়ে ব্যাচ এবং চ্যানেল ডাইমেনশন যোগ করা হয়েছে, যাতে সঠিকভাবে interpolate() অপারেশনটি প্রয়োগ করা যায়। size=(6, 6) দ্বারা আকার ৬x৬ এ পরিবর্তন করা হয়েছে।
২. Reshaping অপারেশন
Reshaping মানে একটি টেনসরের আকারের ডাইমেনশন পরিবর্তন করা, কিন্তু ডেটা অক্ষত রেখে আকার পুনর্গঠন করা। PyTorch এ টেনসর রিসাইজিং এবং reshaping এর জন্য প্রধানত view(), reshape(), এবং flatten() ফাংশনগুলি ব্যবহৃত হয়।
Reshaping এর জন্য view() ফাংশন:
view() ফাংশন ব্যবহার করে টেনসরের আকার পরিবর্তন করা হয়। এটি একটি নতুন আকার ফেরত দেয় যা পূর্ববর্তী আকারের মোট উপাদানের সাথে সামঞ্জস্যপূর্ণ।
উদাহরণ:
import torch
# 4x4 টেনসর তৈরি
tensor = torch.randn(4, 4)
print("Original Tensor:")
print(tensor)
# টেনসর reshape করা (4x4 থেকে 2x8)
reshaped_tensor = tensor.view(2, 8)
print("Reshaped Tensor:")
print(reshaped_tensor)
এখানে view(2, 8) ফাংশনটি টেনসরের আকার ৪x৪ থেকে ২x৮ এ পরিবর্তন করেছে।
reshape() ফাংশন:
PyTorch 1.2 থেকে reshape() ফাংশন ব্যবহারের অনুমতি দেয়, যা view() এর মতোই কাজ করে তবে এটি স্বয়ংক্রিয়ভাবে র্যাঙ্ক ভুল হলে সঠিকভাবে পরিচালনা করতে পারে।
import torch
# 4x4 টেনসর তৈরি
tensor = torch.randn(4, 4)
print("Original Tensor:")
print(tensor)
# reshape ফাংশন ব্যবহার করে টেনসর reshape করা
reshaped_tensor = tensor.reshape(2, 8)
print("Reshaped Tensor using reshape():")
print(reshaped_tensor)
reshape() ফাংশনটি টেনসরের আকার পরিবর্তন করে একইভাবে view() এর মতো কাজ করে, তবে এটি কিছু ক্ষেত্রে একটু বেশি নমনীয়।
flatten() ফাংশন:
flatten() ফাংশন ব্যবহার করে আপনি একটি মাল্টি-ডাইমেনশনাল টেনসরকে একমাত্র ডাইমেনশনে রূপান্তর করতে পারেন। এটি বিশেষত প্রয়োজনীয় যখন আপনি একটি ২D বা ৩D টেনসরকে একক লাইন (vector) আকারে রূপান্তর করতে চান, যেমন নিউরাল নেটওয়ার্কে।
import torch
# 2x3x4 টেনসর তৈরি
tensor = torch.randn(2, 3, 4)
print("Original Tensor:")
print(tensor)
# flatten ফাংশন ব্যবহার করে টেনসর flatten করা
flattened_tensor = tensor.flatten()
print("Flattened Tensor:")
print(flattened_tensor)
এখানে flatten() ফাংশন ৩ডি টেনসরকে ১ডি টেনসরে রূপান্তর করেছে।
৩. unsqueeze() এবং squeeze() অপারেশন
unsqueeze(): একটি টেনসরের ডাইমেনশন বাড়ানোর জন্য ব্যবহৃত হয়। সাধারণত এটি ব্যাচ, চ্যানেল বা অন্যান্য অতিরিক্ত ডাইমেনশন যোগ করার জন্য ব্যবহার করা হয়।squeeze(): এটি একটি টেনসরের একক আকারের ডাইমেনশনগুলি অপসারণ করে, যেমন ১ ডাইমেনশন।
উদাহরণ:
import torch
# 2D টেনসর
tensor = torch.randn(3, 4)
print("Original Tensor:")
print(tensor)
# unsqueeze ব্যবহার করে একটি ডাইমেনশন বাড়ানো
unsqueezed_tensor = tensor.unsqueeze(0)
print("Tensor after unsqueeze:")
print(unsqueezed_tensor)
# squeeze ব্যবহার করে 1 আকারের ডাইমেনশন অপসারণ
squeezed_tensor = unsqueezed_tensor.squeeze()
print("Tensor after squeeze:")
print(squeezed_tensor)
এখানে, unsqueeze(0) একাধিক ডাইমেনশন যোগ করেছে এবং squeeze() ব্যবহার করে আবার সেই ডাইমেনশন অপসারণ করা হয়েছে।
৪. সারাংশ
- Reshaping এবং resize টেনসরের আকার পরিবর্তন করতে ব্যবহৃত হয়, যেখানে reshaping ডেটাকে নতুন আকারে উপস্থাপন করে এবং resize কিছুমাত্রায় সামঞ্জস্যপূর্ণ পরিবর্তন সাধন করে।
view(),reshape(), এবংflatten()অপারেশনগুলি টেনসরগুলির আকার পরিবর্তন করতে ব্যবহৃত হয়, যার মাধ্যমে আপনি বিভিন্ন আকারে টেনসর ডেটা নিয়ে কাজ করতে পারেন।unsqueeze()এবংsqueeze()অপারেশনগুলি ডাইমেনশন বাড়ানো এবং কমানোর জন্য ব্যবহৃত হয়, যা PyTorch এর অনেক অ্যাপ্লিকেশনে উপকারী।
এই অপারেশনগুলি আপনাকে ডিপ লার্নিং মডেল তৈরির সময় ডেটা প্রিপ্রসেসিং এবং মডেল আর্কিটেকচার ডিজাইন করার জন্য প্রয়োজনীয় নমনীয়তা প্রদান করে।
PyTorch একটি শক্তিশালী লাইব্রেরি যা টেনসর ডাটা স্ট্রাকচার ব্যবহার করে। টেনসরের সাথে কাজ করার সময়, Indexing, Slicing, এবং Broadcasting গুরুত্বপূর্ণ কৌশল যা ডেটা ম্যানিপুলেশন এবং অপারেশনকে সহজ এবং কার্যকরী করে তোলে।
এখানে Indexing, Slicing, এবং Broadcasting এর বিস্তারিত আলোচনা করা হলো:
১. Indexing
Indexing হল একটি নির্দিষ্ট উপাদান বা মান সংগ্রহ করার পদ্ধতি। PyTorch তে টেনসরের মধ্যে ডেটা অ্যাক্সেস করার জন্য সাধারণত একইভাবে Python এর লিস্ট এর মতো 0-based indexing ব্যবহার করা হয়।
উদাহরণ:
import torch
# একটি 1D টেনসর তৈরি করা
tensor_1d = torch.tensor([1, 2, 3, 4, 5])
# প্রথম উপাদান অ্যাক্সেস করা (Index 0)
print(tensor_1d[0]) # আউটপুট: 1
# পঞ্চম উপাদান অ্যাক্সেস করা (Index 4)
print(tensor_1d[4]) # আউটপুট: 5
Negative Indexing: Negative indexing ব্যবহার করে আপনি টেনসরের শেষ থেকে উপাদানগুলো অ্যাক্সেস করতে পারেন।
print(tensor_1d[-1]) # আউটপুট: 5 (শেষ উপাদান)
print(tensor_1d[-2]) # আউটপুট: 4 (পূর্ববর্তী উপাদান)
২. Slicing
Slicing ব্যবহার করে একটি টেনসর থেকে নির্দিষ্ট অংশ বা সাবটেনসর বের করা হয়। এটি Python এর লিস্টের slicing এর মতো কাজ করে।
উদাহরণ:
import torch
# একটি 1D টেনসর তৈরি করা
tensor_1d = torch.tensor([1, 2, 3, 4, 5])
# প্রথম 3 উপাদান স্লাইস করা
print(tensor_1d[:3]) # আউটপুট: tensor([1, 2, 3])
# 2 থেকে 4 ইনডেক্স পর্যন্ত উপাদান স্লাইস করা
print(tensor_1d[2:5]) # আউটপুট: tensor([3, 4, 5])
# প্রতি দ্বিতীয় উপাদান স্লাইস করা
print(tensor_1d[::2]) # আউটপুট: tensor([1, 3, 5])
Slicing for Multidimensional Tensors: মাল্টিডাইমেনশনাল টেনসরের ক্ষেত্রেও slicing ব্যবহার করা যায়। উদাহরণস্বরূপ, একটি 2D টেনসরে slicing করা:
# 2D টেনসর তৈরি করা
tensor_2d = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# প্রথম দুই সারি এবং প্রথম দুই কলাম স্লাইস করা
print(tensor_2d[:2, :2]) # আউটপুট: tensor([[1, 2], [4, 5]])
# প্রথম সারি এবং সমস্ত কলাম স্লাইস করা
print(tensor_2d[0, :]) # আউটপুট: tensor([1, 2, 3])
৩. Broadcasting
Broadcasting হল একটি টেনসর অপারেশন কৌশল যা smaller টেনসরের আকার larger টেনসরের সাথে মানানসই করতে ব্যবহৃত হয়। এটি একে অপরের সাথে মানানসই হতে পারে, যেমন একটি scalar মানকে একটি 2D টেনসরের সাথে অপারেট করা।
PyTorch স্বয়ংক্রিয়ভাবে ছোট টেনসরগুলিকে বড় টেনসরের আকারের সাথে "ব্রডকাস্ট" করে, যাতে অপারেশন সঠিকভাবে কাজ করে।
উদাহরণ:
import torch
# একটি 2D টেনসর তৈরি করা
tensor_2d = torch.tensor([[1, 2], [3, 4]])
# একটি scalar মান যোগ করা
result = tensor_2d + 5
print(result) # আউটপুট: tensor([[6, 7], [8, 9]])
# একটি 1D টেনসর যোগ করা
tensor_1d = torch.tensor([1, 2])
result = tensor_2d + tensor_1d
print(result) # আউটপুট: tensor([[2, 4], [4, 6]])
# Broadcasting ঘটে: tensor_1d কে 2D টেনসরের আকারে প্রসারিত করা হয়
এখানে, tensor_1d এর উপাদানগুলো tensor_2d এর প্রতিটি সারির সাথে যুক্ত হয়। এটি broadcasting এর মাধ্যমে ঘটে, যেখানে ছোট আকারের টেনসরটি বড় টেনসরের আকারের সাথে সঙ্গতিপূর্ণ হতে প্রসারিত হয়।
Broadcasting নিয়ম:
- দুটি টেনসরের আকৃতি যদি একে অপরকে সমর্থন করে, তবে সেই দুটি টেনসরের মধ্যে broadcasting সম্ভব।
- ছোট টেনসরের আকার যদি বড় টেনসরের আকারের সাথে মানানসই না হয়, তবে সেটি সঠিকভাবে কাজ করবে না এবং একটি ত্রুটি তৈরি হবে।
সারাংশ
- Indexing: টেনসরের নির্দিষ্ট উপাদান অ্যাক্সেস করতে ব্যবহৃত হয়। এটি 0-based indexing ব্যবহার করে।
- Slicing: টেনসরের একটি অংশ বা সাবটেনসর অ্যাক্সেস করতে ব্যবহৃত হয়। এটি Python এর লিস্ট slicing এর মতো কাজ করে।
- Broadcasting: ছোট আকারের টেনসরকে বড় আকারের টেনসরের সাথে অটোমেটিকভাবে মানানসই করতে ব্যবহৃত হয়, যাতে অপারেশনগুলো সঠিকভাবে কার্যকর হয়।
এই কৌশলগুলি PyTorch এর টেনসর ম্যানিপুলেশন এবং অপারেশন করার ক্ষেত্রে খুবই কার্যকরী।
টেনসর হলো এক ধরনের ডেটা স্ট্রাকচার যা মেশিন লার্নিং ও ডিপ লার্নিং মডেল তৈরির জন্য ব্যবহৃত হয়। এটি সাধারণত ন-মাত্রিক অ্যারে (n-dimensional array) হিসেবে কাজ করে এবং মেশিন লার্নিং অ্যাপ্লিকেশনে বিভিন্ন ধরনের গণনা করার জন্য ব্যবহার করা হয়। মেট্রিক্স অপারেশন যেমন Matrix Multiplication এবং Transpose টেনসরের উপর কাজ করার ক্ষেত্রে অত্যন্ত গুরুত্বপূর্ণ। নিচে এই অপারেশনগুলো কিভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করা হলো।
১. Matrix Multiplication (মেট্রিক্স গুণফল)
মেট্রিক্স গুণফল হলো দুটি মেট্রিক্সের মধ্যে গুণফল করার একটি অপারেশন। এটি সাধারণত টেনসর অ্যালজেব্রায় ব্যবহৃত হয়, বিশেষত নিউরাল নেটওয়ার্ক মডেল ট্রেনিংয়ের সময়।
মেট্রিক্স গুণফল (Matrix Multiplication):
ধরা যাক, আমাদের কাছে দুটি মেট্রিক্স A এবং B রয়েছে, যেখানে:
- A এর আকার হচ্ছে
(m, n)(m টি সারি এবং n টি কলাম), - B এর আকার হচ্ছে
(n, p)(n টি সারি এবং p টি কলাম),
তাহলে A এবং B মেট্রিক্সের গুণফল হবে একটি নতুন মেট্রিক্স C, যার আকার হবে (m, p)।
মেট্রিক্স গুণফলের সূত্র হলো:
এটি বলতে চাচ্ছি যে, C এর প্রতিটি উপাদান হল A এর সারি এবং B এর কলামের উপাদানগুলোর গুণফল এবং তারপর যোগফল।
PyTorch এ Matrix Multiplication:
PyTorch এ মেট্রিক্স গুণফল করতে torch.mm() বা @ অপারেটর ব্যবহার করা হয়।
import torch
# দুটি মেট্রিক্স তৈরি করা
A = torch.tensor([[1, 2], [3, 4]])
B = torch.tensor([[5, 6], [7, 8]])
# মেট্রিক্স গুণফল
C = torch.mm(A, B)
print(C)
এছাড়া, আপনি @ অপারেটরও ব্যবহার করতে পারেন:
C = A @ B
print(C)
আউটপুট:
tensor([[19, 22],
[43, 50]])
এখানে, A এবং B মেট্রিক্সের গুণফল C হয়েছে।
২. Transpose (ট্রান্সপোজ)
Transpose হলো একটি মেট্রিক্স অপারেশন যেখানে মেট্রিক্সের সারি এবং কলাম একে অপরের মধ্যে পরিণত হয়। অর্থাৎ, মেট্রিক্সের সারি হয়ে যায় কলাম এবং কলাম হয়ে যায় সারি।
ধরা যাক, একটি মেট্রিক্স A এর আকার (m, n)। তখন A এর ট্রান্সপোজ A^T এর আকার হবে (n, m)।
Transpose এর সূত্র:
অর্থাৎ, A এর i-তম সারির j-তম উপাদান A^T এর j-তম সারির i-তম কলামে চলে যাবে।
PyTorch এ Transpose:
PyTorch এ ট্রান্সপোজ অপারেশন করতে torch.transpose() বা .T ব্যবহার করা হয়।
import torch
# একটি মেট্রিক্স তৈরি করা
A = torch.tensor([[1, 2], [3, 4]])
# ট্রান্সপোজ করা
A_T = A.transpose(0, 1)
# অথবা
A_T = A.T
print(A_T)
আউটপুট:
tensor([[1, 3],
[2, 4]])
এখানে, A মেট্রিক্সের ট্রান্সপোজ A_T হয়েছে, যেখানে সারি এবং কলাম পরিবর্তিত হয়েছে।
৩. Matrix Multiplication এবং Transpose একসাথে ব্যবহার
মেট্রিক্স গুণফল এবং ট্রান্সপোজ অপারেশন একসাথে ব্যবহার করা অনেক গুরুত্বপূর্ণ। উদাহরণস্বরূপ, (A^T) * B বা A * (B^T) মত কেসে এগুলো একসাথে ব্যবহৃত হতে পারে।
import torch
# দুটি মেট্রিক্স তৈরি করা
A = torch.tensor([[1, 2], [3, 4]])
B = torch.tensor([[5, 6], [7, 8]])
# A এর ট্রান্সপোজের সাথে B এর গুণফল
result = torch.mm(A.transpose(0, 1), B)
print(result)
আউটপুট:
tensor([[23, 28],
[34, 42]])
এখানে, প্রথমে A এর ট্রান্সপোজ নেয়া হয়েছে, তারপর তা B এর সাথে গুণফল করা হয়েছে।
সারাংশ
- Matrix Multiplication: মেট্রিক্স গুণফল হলো দুটি মেট্রিক্সের উপাদানগুলোর গুণফল এবং যোগফল করার প্রক্রিয়া। PyTorch এ এটি
torch.mm()বা@অপারেটর ব্যবহার করে করা হয়। - Transpose: মেট্রিক্স ট্রান্সপোজ হল একটি অপারেশন যেখানে মেট্রিক্সের সারি এবং কলাম পরিবর্তিত হয়। PyTorch এ এটি
torch.transpose()বা.Tব্যবহার করে করা হয়।
এটি সাধারণত ডিপ লার্নিং মডেল এবং ডেটা প্রসেসিংয়ে ব্যবহৃত হয়। PyTorch ব্যবহার করে আপনি সহজেই এই অপারেশনগুলো বাস্তবায়ন করতে পারেন।
Read more