در مطالب پیشین اشاره کردیم که تنسورفلو از داده ساختارهای مبتنی بر تانسور بهره میگیرد و همچنین انواع نوع دادههای مبتنی تانسور را مرور کردیم. در ادامه به معرفی ویژگیهای این نوع داده ساختارهای تانسورها میپردازیم.
برنامههای تنسورفلو از داده ساختارهای مبتنی بر تانسور برای نمایش و بازنمایی دادهها استفاده میکنند. همانطور که پیشتر هم گفتیم شما میتوانید برای تجسم بهتر تانسورها از آرایهها و یا لیستهای چندبعدی (n-بعدی) استفاده کنید. یک تانسور نوعی ایستا (static) و ابعادی پویا دارد. فقط تانسورها میتوانند بهصورت رأسهای گراف محاسباتی مورد پردازش قرار گیرند.
درجه
در تنسورفلو، تانسورها به صورت واحدهایی از ابعاد توصیف میشوند که به آن درجه (Rank) میگویند. درجه تانسور شبیه درجه ماتریس نیست. درجه تانسور بیانگر تعداد ابعاد یک تانسور است. برای مثال تانسور روبرو (که بهصورت یک لیست پایتونی تعریفشده است) دارای درجه ۲ است:
t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
تانسور درجه ۲ در حقیقت همان چیزی است که ما عمدتاً با نام ماتریس و تانسور درجه ۱ را با نام بردار (Vector) میشناسیم. در تانسور درجه ۲ برای دسترسی به هر المان (درایه) از دستورهای به شکلt[i,j] استفاده میشود. برای تانسور درجه ۳ مستلزم آن هستیم که از یک آدرسدهی به شکل t[i, j, k] استفاده کنیم.
درجه | موجودیت ریاضیاتی | نمونه کد پایتون |
۰ | مقدار اسکالر | s = 483 |
۱ | بردار | v = [1.1, ۲٫۲, ۳٫۳] |
۲ | ماتریس | m = [[1, ۲, ۳], [۴, ۵, ۶], [۷, ۸, ۹]] |
۳ | تانسور درجه ۳ | t = [[[2], [۴], [۶]], [[۸], [۱۰], [۱۲]],[[۱۴], [۱۶], [۱۸]]] |
n | تانسور درجه n | …. |
شکل
مستندات تنسورفلو از سه اصطلاح برای توصیف ابعاد تانسورها استفاده میکند: درجه، شکل و شماره بعد. جدول زیر نحوهی ارتباط مفاهیم این اصطلاحها را با یکدیگر نشان میدهد.
درجه | شکل | شماره بعد | مثال |
۰ | [] | ۰-D | یک تانسور ۰-D (0-بعدی) یک عدد است. (اسکالر) |
۱ | [D0] | ۱-D | یک تانسور ۱-D (1-بعدی) به شکل [۵] |
۲ | [D0, D1] | ۲-D | یک تانسور ۲-D به شکل [۳,۴] |
۳ | [D0, D1, D2] | ۳-D | یک تانسور ۳-D به شکل [۱,۴,۵] |
n | [D0, D1, … Dn-1] | n-D | یک تانسور به شکل [D0, D1, … Dn-1]. |
شکل تانسورها را میتوان به صورت لیست پایتون یا تاپلهایی (tuple) از اعداد و یا نوع داده tf.TensorShape نشان داد.
نوع داده
تانسورها در تنسورفلو علاوه بر ابعاد دارای نوع دادهای نیز هستند. شما میتوانید هر یک از نوع دادههای جدول زیر را به تانسورها اختصاص دهید.
نوع داده | نوع پایتون | شرح |
DT_FLOAT | tf.float32 | ممیز شناور ۳۲ بیتی |
DT_DOUBLE | tf.float64 | ممیز شناور ۶۴ بیتی |
DT_INT8 | tf.int8 | عدد صحیح علامت دار ۸ بیتی |
DT_INT16 | tf.int16 | عدد صحیح علامتدار ۱۶ بیتی |
DT_INT32 | tf.int32 | عدد صحیح علامتدار ۳۲ بیتی |
DT_INT64 | tf.int64 | عدد صحیح علامتدار ۶۴ بیتی |
DT_UINT8 | tf.uint8 | عدد صحیح بدون علامت ۸ بیتی |
DT_UINT16 | tf.uint16 | عدد صحیح بدون علامت ۱۶ بیتی |
DT_STRING | tf.string | آرایه با طول متغیر. هر عنصر از یک تانسور آرایهای از بایتها است. |
DT_BOOL | tf.bool | بولی. |
DT_COMPLEX64 | tf.complex64 | اعداد مختلط ساختهشده از دو ۳۲ بیت نقاط شناور: قسمت حقیقی و موهومی. |
DT_COMPLEX128 | tf.complex128 | اعداد مختلط ساختهشده از دو ۶۴ بیت نقاط شناور: قسمت حقیقی و موهومی. |
DT_QINT8 | tf.qint8 | ۸ بیت عدد صحیح علامتدار که در عملیات کوانتیده استفاده میشود. |
DT_QINT32 | tf.qint32 | ۳۲ بیت عدد صحیح علامتدار که در عملیات کوانتیده استفاده میشود. |
DT_QUINT8 | tf.quint8 | ۸ بیت عدد صحیح بدون علامت که در عملیات کوانتیده استفاده میشود. |
در مطالب بعدی با نحوه به کارگیری این تانسورها بیشتر آشنا خواهید شد.