টেনসর – নিউরাল নেটওয়ার্কের ডেটা রিপ্রেজেন্টেশন

মেশিন লার্নিং সিস্টেম গুলোতে ডেটা স্ট্র্যাকচার হিসেবে টেনসর ব্যবহার করা হয়। গুগলের টেনসরফ্লোর নাম এখান থেকেই এসেছে। এটি হচ্ছে ডেটা কন্টেইনার। টেনসরে বেশির ভাগ ক্ষেত্রেই সাধারণ নিউম্যারিক্যাল ডেটা স্টোর করা হয়। তাই বলা যায় টেনসর হচ্ছে নিম্যারিক্যাল ডেটা কনটেইনার। আমরা অনেকেই ম্যাট্রিক্স নিয়ে কাজ করেছি, যেখানে ম্যাট্রিক্স হচ্ছে 2D Tensor।

অ্যারে নিয়ে কাজ করলে ডাইমেনশ সম্পর্কে আইডিয়া থাকার কথা। টেনসরের ডাইমেনশনকে axis অথবা rank বলে। NumPy কোন একটা টেনসরের ডাইমেনশন বের করতে পারি ndim এর মাধ্যমে।

 

টেনসর এবং এর র‍্যাংক
টেনসর এবং এর র‍্যাংক

স্কেলার বা 0D টেনসর

কোন টেনসরে যদি শুধু মাত্র একটা নাম্বার স্টোর করা হয়, তাহলে তাকে বলে স্কেলার বা 0D টেনসর বা স্কেলার টেনসর। স্কেলার টেনসরের ডাইমেনশন আমরা এভাবে দেখতে পারিঃ


import numpy as np
x = np.array(100)
print(x)
print(x.ndim)

ভেক্টর বা 1D টেনসর

একের অধিক নাম্বারের অ্যারেকে বলে ভেক্টর বা 1D টেনসর।

y = np.array([10, 12, 14, 16])
print(y)
print(y.ndim)

ম্যাট্রিক্স বা 2D টেনসর

একের অধিক ভেক্টরের অ্যারে হচ্ছে ম্যাট্রিক্স বা 2D টেনসর।

z = np.array([[1, 2],
     [3, 4]])
print(z)
print(z.ndim)

3D টেনসর

একের অধিক 2D টেনসরের অ্যারে হচ্ছে 3D টেনসর। এভাবে একের অধিক 3D টেনসরের অ্যারে নিয়ে 4D Tensor তৈরি করা যায়। একই ভাবে যত ইচ্ছে তত র‍্যাংকের Tensor তৈরি করা যায়।

এবার রিয়েল ওয়ার্ল্ড ডেটা নিয়ে কাজ করে দেখতে পারি। আমরা mnist এর ডেটা দেখব। তার জন্য প্রথমে mnist ডেটাসেট লোড করে নিব।

from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

ডেটার শেইপ এভাবে পেতে পারিঃ

print(train_images.shape) 
(60000, 28, 28)

এর মানে হচ্ছে এখানে ৬০০০০ ইমেজ রয়েছে। যেখানে ইমেজের সাইজ হচ্ছে 28*28 পিক্সেল।

ট্রেনিং ডেটার ডাইমেনশন বের করতে পারি এভাবেঃ

print(train_images.ndim) 

যা প্রিন্ট করবে 3

ডেটা টাইপঃ

print(train_images.dtype) 

ডেটা স্লাইসিং:

টেনসর থেকে এক বা একের অধিক ডেটা সিলেক্ট করাই হচ্ছে স্লাইসিং। mnist এর ট্রেইনিং ডেটা থেকে আমরা একটা ডেটা বের করতে পারি এভাবেঃ

single_image = train_images[10]

আবার এই ইমেজ আমরা প্লটিং করে দেখতে পারি এভাবেঃ

single_image = train_images[10]

import matplotlib.pyplot as plt
plt.imshow(single_image, cmap="binary") 
plt.show()

একটা নির্দিষ্ট রেঞ্জের ডেটা সিলেক্ট করতে পারি এভাবেঃ

digits = train_images[10:20] 
print(digits.shape)

যা train_images ডেটা সেট থেকে 10-20 এর মধ্যে ডেটা গুলো রিটার্ণ করবে। যেখানে 20 তম ইনডেক্স এর ডেটা ইনক্লুড থাকবে না। এই ইমেজ গুলো দেখতে পারি এভাবেঃ

columns = 4
rows = 3
fig = plt.figure(figsize=(10, 10))

for i in range(len(digits)):
    fig.add_subplot(rows, columns, i+1)
    plt.imshow(digits[i], cmap="binary")
plt.show()

MNIST ডেটা নিয়ে কাজ করতে চাইলে টেনসরফ্লো ব্যবহার করে হ্যান্ডরিটেন নাম্বার ক্লাসিফিকেশন লেখাটি দেখতে পারেন।

Leave a Reply