مروری بر تنسورها در پایتورچ
شبکه های عصبی در PyTorch:
به ساده تدرین بیان، شبکه عصبی یک تابع ریاضی است که یک یا چند ورودی دریافت می کند، آن(ها) رو پردازش می کند، سپس یک یا چند خروجی تولید می کند. در PyTorch شبکه های عصبی از تنسورهای PyTorch ایجاد می شوند. در واقع یک تنسور PyTorch یک داده ساختار یافته (Data structure) برای اعداد و آرایه های چند بعدی در پایتون (Python) است. برای شبکه عصبی، ورودی x یک تنسور است که خروجی y نیز یک خواهد بود و در نظر داشته باشد که شبکه عصبی از مجموعه ای از پارامترها تشکیل شده است که آنها نیز تنسور هستند.برای تولید یک یا چند خروجی، شبکه عصبی باید ورودی خود را پردازش کند. برای پردازش، شبکه عصبی یک سری عملیات تنسوری را روی ورودی دریافتی اعمال می کند که بسیاری از این عملیات تنسوری، عملیات های ریاضی مانند ضرب و جمع هستند.

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

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

در نظر داشته باشید که تبدیل تنسورهای PyTorch به آرایه های numpy و بالعکس بسیار آسان است و این قابلیت به PyTorch این امکان رو میدهد تا در اکوسیستم Python کار کند. علاوه بر این امکان، میتوانیم به راحتی PyTorch را با GPU یکپارچه کنیم که یک عامل مهم برای آموزش شبکه های عصبی است. پارامترهای موجود در شبکه عصبی نوعی تنسور هستند که به شما امکان محاسبه گرادیان ها یا مشتقات را می دهند و از همین رو گرادیان ها و مشتقات به شما این امکان را میدهند که شبکه عصبی را آموزش دهید.
👈ما از پارامترها برای شبکه های عصبی خود در PyTorch با تنظیم مقدار پارامتر requires_grad = True استفاده خواهیم کرد. ما همچنین کلاس دیتاست را بررسی می کنیم که کار با مجموعه داده های بزرگ در PyTorch را بسیار آسان تر می کند.
در ادامه می خواهیم تنسورهای یک بعدی را بررسی کنیم و شما را با برخی از عملیاتهای رایج که در تنسورها هنگام ساخت شبکه عصبی، پیش پردازش داده ها یا تحلیل نتایج استفاده می شوند، آشنا کنیم. پس اجازه بدید شروع کنیم و قدم به قدم پیش بریم ... 😍
تنسورها و ابعاد آنها ؟!
تنسورها آرایهِهایی هستند که بلوکهای سازنده شبکه عصبی را تشکیل میدهند.
اجازه بدید ابتدا بفهمیم که یک تنسور یک بعدی چیست؟
ولی قبلش باید بدانیم که تنسور صفر بعدی هم داریم. 😮
- تنسور صفر بعدی فقط یک عدد است : 1, 2, 0.2, 10, 250
- تنسور یک بعدی یک آرایه از اعداد است که می تواند یک ردیف از جدول یک پایگاه داده، یک سری زمانی یا یک بردار باشد.
| Price | ... | Age | Rooms | House |
|---|---|---|---|---|
| 40 | 5 | 2 | 1 | |
| 26 | 34 | 1 | 2 | |
| 10 | 1 | 5 | 3 | |
| 41 | 15 | 3 | 4 |


انواع دادهها یا Data Types
عناصر موجو در یک تنسور، همگی از یک نوع داده هستند، لذا وقتی میگوییم Tensor Type منظور نوع تنسور است. هنگام کار با اعداد حقیقی، Tensor Type میتواند FloatTensor یا DoubleTensor باشد که اعداد اعشاری را شامل میشوند. به عنوان مثال وقتی هنگام کار با اعداد صحیح بدون علامت که در تصاویر 8 بیتی استفاده میشوند، نوع تنسور ByteTensor است. بنابراین، م یبینیم که بسته به نوع دادهای عناصر در تنسور، انواع مختلفی از تنسورها را داریم.
دیدگاه ها