نوشته های وبلاگ

تنسور چیست؟

تنسور چیست؟

در این مطلب مختصری در مورد تانسورها ( Tensors) توضیح داده می‌شود.

سپس به تعریف و تبدیل و مقداردهی آن‌ها می‌پردازیم.

تنسور چیست؟

تنسور یا تانسور (Tensor) عنصری هندسی است که در  علوم ریاضی و فیزیک به منظور گسترش مفاهیم اسکالرها، بردارها و ماتریس‌ها به ابعاد بالاتر معرفی شده است. تانسورها اولین بار توسط تولیو لوی-چیویتا و گرگریو ریتچی-کورباسترو ابداع شدند. در واقع کار آن‌ها ادامه کارهای برنهارت ریمان والوین برونو کریستوفل و دیگران در حساب دیفرانسیل مطلق بود.

تانسور آرایه‌ای است از اعداد که در یک جدول (ماتریس) چیده شده‌اند. این جدول در حالت کلی می‌تواند به صورت {\displaystyle N\times M\times O\times P\times ...} باشد که حروف بزرگ هر کدام نمایندهٔ یک عدد طبیعی و بیانگر ابعاد جدول و {\displaystyle \times } نشان دهندهٔ عمل ضرب بین آن‌هاست. تانسور در ساده‌ترین حالت می‌تواند یک عضو داشته باشد که به آن تانسور، اسکالر گوییم. در حالت کمی پیشرفته تر تانسور می‌تواند به صورت بردار باشد. یعنی وقتی شما بردارA را به صورت {\displaystyle (x,y,z)} نشان می‌دهید در حقیقت یک تانسور دارید. در حالتی باز هم پیشرفته تر تانسور می‌تواند دو بعدی باشد (به صورت ماتریسی). یعنی مثلاً جدول ما {\displaystyle 2\times 2} باشد یعنی دو سطر و دو ستون داشته باشد.

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

ایده‌ی استفاده از داده‌ساختار‌های مختلف، از مدت‌های بسیاری در علوم کامپیوتر و نرم افزار مورد بحث و استفاده بوده است. برای مثال نرم افزار Matlab که اختصار Matrix Laboratory است، از ایده‌ی داده ساختاری ماتریسی برای حل مسئلات دز حوزه‌های مختلف علوم و مهندسی بهره می جوید، برای مثال وقتی در متلب شما می‌نویسید  a=1 ، در حقیقت شما یک ماتریس \(1*1\) دارید که تنها درایه‌ی آن برابر مقدار ۱ است.

چرا TensorFlow از تنسورها استفاده می‌کند؟

دلایل زیادی نظیر اینکه تصاویر طیف خاکستری در کامپیوتر معمولا به صورت ماتریس‌های \(n*m\) ذخیره می‌شوند( تصاویر رنگی با ابعاد بیشتر مانند \(n*m*3\)) و وقتی ما دسته‌ای از تصاویر داریم (مثلا k تصویر)، مجبوریم ابعاد ماتریس‌ها را به صورت \(n*m*k\) و یا در تصاویر رنگی \(n*m*3*k\) افزایش دهیم سبب شدند که در طراحی TensorFlow از داده ساختار تانسور برای نگه داری مقادیر و نوع داده متغیرها استفاده شود. اما مهم ترین دلیل استفاده TensorFlow  از تانسورها، در حقیقت سهولت مدیریت وزن‌ها و مقادیر نرون‌ها در لایه‌های مختلف در شبکه‌های عصبی عمیق و یادگیری عمیق است (برای اطلاعات بیشتر).  تصاویر زیر به خوبی مفهوم تانسورهای تصاویر و شبکه عصبی را می‌رساند.

mnist-train-xs
تانسوری از تصاویر ارقام دست نویس انگلیسی (MNIST)
تانسوری از شبکه عصبی
تانسوری از شبکه عصبی

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

برای آموزش کار با تانسورها در TensorFlow مطلب کار با تانسورها را مطالعه کنید.

با نظرات و بازخوردهای خود در بهبود هر چه بهتر مطالب و محتوای سایت یاری دهید.

مطالب مرتبط

1 دیدگاه برای “تنسور چیست؟

پاسخ دهید

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