یک بحث مفصل در مورد تانسورها، چرا در یادگیری عمیق اینقدر مهم است؟

تفاوت بین ماتریس و تانسور چیست؟
آگوست 19, 2023
بارگذاری داده در پایتورچ
آگوست 22, 2023

یک بحث مفصل در مورد تانسورها، چرا در یادگیری عمیق اینقدر مهم است؟

این مقاله همه چیز در مورد ساختار داده اساسی یادگیری عمیق به نام Tensor است. تمام ورودی‌ها، خروجی‌ها و تبدیل‌ها در یادگیری عمیق تنها از طریق تانسور نمایش داده می‌شوند. بسته به پیچیدگی تانسورهای داده با ابعاد مختلف نقش محفظه داده را ایفا می کنند.

بنابراین، ناگفته نماند که برای بهبود مهارت یادگیری عمیق باید به دانش خود از تانسورها اطمینان داشته باشید. شما باید با خواص مختلف و راه حل ریاضی آن مسلط باشید. این مقاله به شما کمک می کند تا با تانسورها آشنا شوید. پس از اتمام این مقاله، موضوعات زیر را به طور کامل بررسی خواهید کرد:

  • تانسورها چیست؟
  • خواص تانسورها مانند بعد، رتبه، شکل و غیره.
  • استفاده از تانسورها در یادگیری عمیق
  • نمونه های واقعی از کاربرد تانسور

همیت تانسورها را می توان با این واقعیت درک کرد که گوگل یک کتابخانه کامل یادگیری ماشینی به نام Tensorflow روی تانسورها ایجاد کرده است. بنابراین، در این مقاله سعی می کنم ایده اصلی در مورد تانسور، انواع مختلف تانسورها، کاربرد آنها را با کد پایتون اجرایی کنم.

من همچنین سعی می کنم آن را تا حد امکان ساده نگه دارم. قسمت های ریاضی نیز با کمک اسکریپت های پایتون ارائه خواهد شد. زیرا درک آن برای کسانی که هیچ پیش زمینه ریاضی ندارند یا کمی دارند بسیار ساده تر خواهد بود. برخی از دانش اولیه ماتریس مطمئنا برای یادگیری سریع مفید خواهد بود.

پس بیایید مقاله را با واضح ترین سوال شروع کنیم.

تنسور چیست ؟

تانسور چیزی نیست جز محفظه ای از داده ها. این همان کاری است که ماتریکس ها برای NumPy انجام می دهند. از نظر تانسوری، ماتریس یک تانسور دو بعدی (2-D) است. به روشی مشابه، یک بردار یک تانسور یک بعدی است در حالی که یک اسکالر یک تانسور صفر بعدی است.

وقتی با یک تصویر سروکار داریم، آن تصویر دارای سه بعد ارتفاع و عرض و عمق است. بنابراین یک تانسور سه بعدی برای ذخیره یک تصویر مورد نیاز است. به همین ترتیب، وقتی مجموعه ای از تصاویر وجود دارد، بعد دیگری ازتعداد از تصاویر اضافه می شود بنابراین، اکنون به یک ظرف چهار بعدی نیاز داریم. یک تانسور 4 بعدی برای این هدف مناسب خواهد بود. برای ذخیره فیلم ها از تانسورهای 5 بعدی استفاده می شود.

به طور کلی در شبکه های عصبی ما نیاز به استفاده از تانسور تا چهار بعد داریم. اما بسته به پیچیدگی داده ها می تواند به هر ابعادی برسد. ماتریس‌های NumPy را می‌توان شکل کلی از تانسورها با هر ابعاد دلخواه در نظر گرفت.

داده های اسکالر

اینها تانسورهایی با بعد صفر هستند. انواع داده ها مانند float 32، float 64 همگی داده های اسکالر هستند. این داده های اسکالر دارای رتبه صفر هستند زیرا دارای محورهای صفر هستند. ویژگی ndim پایتون می تواند تعداد محورهای هر ساختار داده را نمایش دهد. کد زیر را که بر روی یک ساختار داده اسکالر اعمال شده است مشاهده کنید.

می توانید این کدهای ساده را امتحان کنید و نتایج را بررسی کنید. اگر تازه با کامپایلر پایتون آشنا شده اید، می تواند شروع خوبی باشد.

داده های برداری

این تانسورهای یک بعدی (1-D) هستند. پس رتبه یک است. معمولاً تمایز بین بردار n بعدی با تانسور n بعدی گیج کننده است. برای مثال اگر بردار زیر را در نظر بگیریم

این یک بردار شش بعدی با یک محور است، نه یک تانسور 6 بعدی. یک تانسور 6 بعدی دارای 6 محور با هر تعداد ابعاد در امتداد هر یک از محورها خواهد بود.

ماتریس ها

اینها تانسورهای دو بعدی با دو محور هستند. یک ماتریس دارای ردیف و ستون است، بنابراین دو محور و رتبه دو است. باز هم می توانیم این را با ویژگی ndim بررسی کنیم. بیایید یک ماتریس NumPy با اندازه (3،4) در نظر بگیریم که به این معنی است که ماتریس دارای 3 سطر و 4 ستون است.

بنابراین، اجازه دهید رتبه آن را به همان روشی که در مورد اسکالر و برداری انجام دادیم بررسی کنیم:

در حالی که در حال نوشتن کدها هستید، در مورد ورودی ماتریس بسیار محتاط باشید. اغلب باز و بسته شدن بریس ها باعث ایجاد خطا می شود.

تانسورهایی با ابعاد بالاتر

همانطور که در ابتدا اشاره کردم، تانسورهایی که معمولاً استفاده می کنیم، دارای ابعاد تا چهار هستند. اما در مورد داده های ویدئویی ابعاد می تواند تا پنج افزایش یابد. ما به راحتی می‌توانیم ساختار داده‌های ابعاد تا دو را درک کنیم. اما وقتی فراتر از آن می رود، تجسم آنها کمی دشوار می شود.

تانسورهای سه بعدی

در این بخش به چند تانسور با ابعاد بالا و نحوه ذخیره داده ها می پردازیم. بنابراین، بیایید با تانسورهای سه بعدی شروع کنیم. بیایید تانسور زیر را در نظر بگیریم و سعی کنیم سه بعد آن را شناسایی کنیم.

می توانید ببینید که در واقع یک ساختار داده است که شامل سه ماتریس است که هر کدام دارای 3 سطر و 4 ستون است. برای درک شکل این تانسور این تصویر را ببینید. بیایید یک متغیر برای ذخیره داده ها ایجاد کنیم و رتبه آن را با ویژگی ndim بررسی کنیم.

# High dimensional tensors
x=np.array([[[2,5,6,9],
             [3,9,0,1],
             [2,8,9,1]],
            [[12,5,16,9],
             [4,6,0,1],
             [2,5,9,8]],
            [[1,0,6,2],
              [8,10,0,5],
             [13,3,6,1]]])
print(x)
print(x.ndim)

برای درک ساختار یک تانسور سه بعدی، خروجی زیر را ببینید. مجموعه ای از ماتریس ها است. بنابراین برخلاف یک ماتریس منفرد با دو محور، یک تانسور سه بعدی دارای سه محور است.

تانسورهای 4 بعدی

همانطور که یک تانسور سه بعدی به دست می آوریم، اگر برخی از این تانسورهای سه بعدی گروه بندی شوند، بعد دیگری ایجاد می شود که تانسور را به یک تانسور 4 بعدی تبدیل می کند. برای یک تانسور 4 بعدی فرضی به تصویر مراجعه کنید. در اینجا می توانید ببینید که سه مکعب با هم یک مجموعه هستند. چنین تانسورهای 4 بعدی برای ذخیره تصاویر برای تشخیص تصویر در یادگیری عمیق بسیار مفید هستند.

به همین ترتیب ما می توانیم تانسورهای ابعاد بالاتر بیشتری داشته باشیم. اگرچه تانسورهای تا 4 بعدی رایج‌تر هستند، برخی اوقات برای فیلم‌ها از تانسورهای 5 بعدی نیز استفاده می‌شود. از لحاظ نظری محدودیتی در بعد وجود ندارد. به منظور ذخیره سازی داده ها به صورت سازماندهی شده، می توان از هر n ابعادی استفاده کرد.

تانسورهای 5 بعدی

این نوع تانسورها زمانی است که ما نیاز به ذخیره داده ها با بعد دیگری داریم. داده های ویدئویی می تواند یک مثال ایده آل برای استفاده از تانسورهای 5 بعدی باشد.

اگر یک ویدیوی 5 دقیقه ای با وضوح 1080 HD را مثال بزنیم، ساختار داده آن چه ابعادی خواهد داشت؟ بیایید به روشی ساده محاسبه کنیم. اندازه پیکسل 1080 در 1920 پیکسل خواهد بود. مدت زمان فیلم بر حسب ثانیه 5×60=300 ثانیه است.

حال اگر ویدیو با 10 فریم در ثانیه نمونه برداری شود، تعداد کل فریم ها 300×10=3000 خواهد بود. فرض کنید عمق رنگ ویدیو 3 باشد. بنابراین برای این ویدیو، تانسور باید 4 بعد داشته باشد، شکل (3000، 1080،1920،3).

بنابراین، تک کلیپ ویدیویی یک تانسور 4 بعدی است. حالا اگر بخواهیم چندین ویدیو ذخیره کنیم، مثلا 10 کلیپ ویدیویی با وضوح HD 1080، به تانسورهای 5 بعدی نیاز داریم. شکل این تانسور 5 بعدی (3000, 1080,1920,3,10) خواهد بود.

این حجم عظیمی از محتوای ویدیویی است. اگر بخواهیم از چنین داده عظیمی به طور مستقیم در یادگیری عمیق استفاده کنیم، روند آموزش هرگز پایان نخواهد یافت. بنابراین، این نوع داده ها قبل از استفاده به عنوان ورودی در شبکه عصبی نیاز به کاهش اندازه و چندین مرحله پیش پردازش دارند.

شکل تانسورها

این یک مفهوم برای ذکر یک عدد برای طول هر محور یک تانسور است. اینها چند اعداد صحیح هستند که طول هر بعد را نشان می دهند.

یک بردار فقط یک محور/بعد دارد، بنابراین شکل فقط یک عنصر است. برداری که در اینجا به عنوان مثال استفاده کردیم دارای 6 عنصر است بنابراین شکل آن (6،) است.

ماتریسی به عنوان تانسور دو بعدی که در بالا مورد بحث قرار گرفتیم شکل (3،4) دارد. زیرا از 3 سطر و 4 ستون تشکیل شده است.

به همین ترتیب در مورد یک تانسور سه بعدی، شکل تاپل شامل طول هر سه محور آن خواهد بود. برای مثالی که در اینجا گرفتیم دارای شکل (3،3،4) است. برای تجسم تصویر زیر را ببینید.

باز هم تانسور 4 بعدی که در بالا به عنوان مثال در نظر گرفتیم دارای شکل (3،3،7،4) است زیرا سه مکعب مجزا را با هم گروه بندی می کند. تصویر زیر یک شکل ابعاد بالاتر را برای درک ابعاد و شکل آن نشان می دهد.

نمونه های واقعی از تانسورها به عنوان ظرف داده

بنابراین، در حال حاضر، من فکر می کنم که اصول تانسور برای شما روشن است. شما به عنوان یک ساختار داده می دانید که چگونه یک تانسور داده ها را ذخیره می کند. ما نمونه‌های کوچکی از ساختارهای داده پرکاربرد را به عنوان تانسور بیان کردیم.

اما به طور کلی، تانسورهای مورد استفاده برای حل مسائل واقعی بسیار پیچیده تر هستند. یادگیری عمیق مورد استفاده برای تشخیص تصویر اغلب با هزاران تصویر ذخیره شده در پایگاه داده سروکار دارد. بنابراین، برای مدیریت چنین داده های پیچیده ای باید از کدام ساختار داده استفاده کنیم؟ اینجا تانسورها می آیند تا ما را نجات دهند.

مجموعه داده‌های MNIST با ارقام دست‌نویس

بیایید یک مثال واقعی از چنین پایگاه داده تصویری را در نظر بگیریم. ما همان داده‌های MNIST را که برای تشخیص ارقام دست‌نویس است، استفاده می‌کنیم. این یک پایگاه داده تصویری است که 60000 تصویر از تصاویر دست نویس را ذخیره می کند. و به طور موثر در یک تانسور سه بعدی با شکل (اندازه_نمونه، ارتفاع، عرض) ذخیره می شود.

بیایید پایگاه داده را بارگذاری کنیم. این یک پایگاه داده پیش فرض در کتابخانه Keras است.

#Loading the MNIST data set 
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

کدهای پایتون که قبلاً در این مقاله اعمال کردیم را می توان در اینجا نیز برای بررسی تعداد محورهای مجموعه داده آموزشی اعمال کرد.

# Checking the axes of train_images
print(train_images.ndim)

و خط کد بالا رتبه 3 برمی گرداند. مجدداً شکل ساختار داده را بررسی خواهیم کرد که کل پایگاه داده را ذخیره می کند.

# Checking the shape of the tensor
print(train_images.shape)

شکلی که باز خواهد گشت (60000,28,28) است. که نشان می دهد هر کدام 60000 تصویر با اندازه 28×28 پیکسل دارد.

بیایید یک تصویر از مجموعه داده را بررسی کنیم. همانطور که ذکر کردم مجموعه داده حاوی تصویر دست نوشته ارقام است و یک مجموعه داده نمونه کلاسیک برای تشخیص ویژگی است. اگرچه اساساً یک مجموعه داده حل شده است، هنوز هم بسیاری از علاقه مندان به یادگیری عمیق از آن برای آزمایش کارایی مدل جدید خود استفاده می کنند.

# Printing the 10th image from the MNIST data set
import matplotlib.pyplot as plt
sample_image=train_images[10]
plt.imshow(sample_image)

خروجی کد بالا دهمین تصویر یک رقم دست نویس خواهد بود. زیر را ببینید اگر آن را می شناسید 🙂

داده های قیمت سهام

در بازار سهام هند قیمت هر سهم در هر دقیقه تغییر می کند. قیمت سهام بالا، پایین و نهایی یک سهم خاص برای هر دقیقه از یک روز معاملاتی داده های بسیار مهمی برای معامله گران است.

برای مثال، نمودار کندل استیک یک سهم خاص را در یک روز معاملاتی خاص ببینید. نمودار رفتار قیمت سهام را از ساعت 10 صبح تا 3 بعد از ظهر نشان می دهد. یعنی در کل 5 ساعت از روز معاملاتی یعنی 5×60=300 دقیقه.

بنابراین بعد این ساختار داده (300،3) خواهد بود. که آن را به یک تانسور دو بعدی تبدیل می کند. این تانسور قیمت بالا، پایین و نهایی سهام را برای یک روز خاص ذخیره می کند.

حال اگر بخواهیم قیمت سهام را برای کل هفته ذخیره کنیم؟ سپس بعد تبدیل می شود (trading_week، دقیقه، stock_price). اگر در آن هفته 5 روز معاملاتی وجود داشته باشد، (5,300,3). که آن را تانسور سه بعدی می کند.

باز هم اگر بخواهیم تعدادی از قیمت سهام را برای یک هفته خاص ذخیره کنیم؟ می گویند برای 10 سهم مختلف؟ بنابراین بعد دیگری اضافه می شود. تبدیل به یک تانسور 4 بعدی با شکل (معامله هفته، دقیقه، قیمت سهام، تعداد سهام) یعنی (5،300،3،10) می شود.

حالا به صندوق های سرمایه گذاری فکر کنید که مجموعه سهام هستند. بنابراین اگر سبد سرمایه‌گذاری مشترک شخصی را دارای صندوق‌های مشترک متفاوتی در نظر بگیریم، برای ذخیره قیمت بالا، پایین و نهایی تمام سهام آن سبد برای یک هفته تجاری کامل، به یک تانسور 5 بعدی نیاز داریم. شکل چنین تانسوری خواهد بود (معاملههفته، دقیقه، قیمت سهام، تعداد_ سهام، وجوه_متقابل).

نتیجه

تانسور و ویژگی های مختلف آن اکنون برای شما واضح است. من می دانم که برخی از اصطلاحات جدید وجود دارد و برای اولین بار، ممکن است کمی گیج کننده به نظر برسند. بنابراین در اینجا در جدول زیر، من یک بار دیگر آنها را برای یک بازنگری سریع خلاصه کرده ام.

شکلرتبه / محوراستفادهنوع تنسور
تک عنصر 0ذخیره یک عددتنسور صفر بعدی
طول یک آرایه1ذخیره یک بردارتنسور یک بعدی
ردیف‌ها، ستون‌ها/نمونه‌ها، ویژگی‌ها2ذخیره یک ماتریستنسور دو بعدی
عرض، ارتفاع، عمق رنگ (در صورت تصویر)/ نمونه ها، تاخیر زمانی، ویژگی ها (در صورت سری زمانی)3ذخیره یک تصویرتنسور سه بعدی
عرض، ارتفاع، عمق رنگ، تعداد تصاویر / نمونه ها، کانال ها، ارتفاع، عرض4ذخیره چند تصویرتنسور چهار بعدی
نمونه، فریم، ارتفاع، عرض، کانال5ذخیره چند ویدیوتنسور پنج بعدی

امیدواریم که مقاله برای شما مفید بوده باشد. اگر سوال یا ابهامی در مورد موضوع دارید، لطفاً آن را در نظرات زیر مطرح کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *