TensorFlow چیست و چگونه کار میکند؟
یادگیری ماشین یکی از مباحث سنگین و پیچیده دنیای هوش مصنوعی است، اما به لطف چهارچوبهای غنی و قدرتمندی که تولید شده پیادهسازی مدلهای یادگیری ماشین به مراتب سادهتر از گذشته شدهاند. چهارچوبهایی شبیه به تنسورفلو (TensorFlow) روند دستیابی به دادهها، مدلهای آموزشی، ارائه پیشبینیها و پالایش نتایج را سهولت بخشیدهاند.در ادامه مطلب با اتاق سرور دات کام همراه باشید.
TensorFlow که توسط نخبگان گوگل ساخته شده یک کتابخانه منبعباز برای محاسبات عددی و یادگیری ماشین در مقیاس بزرگ است. تنسورفلو مدلها و الگوریتمهای یادگیری ماشین و یادگیری عمیق (با نام مستعار شبکههای عصبی) را درهم آمیخته و آنها را به شکل مفید و قابل استفادهای تبدیل میکند. این کتابخانه از پایتون برای فراهم کردن یک API خوش ساخت برای ساخت اپلیکیشنها استفاده میکند که این اپلیکیشنها با عملکرد سطح بالایی اجرا میشوند. تنسورفلو میتواند شبکههای عصبی عمیق را برای طبقهبندی ارقام دستنویس شده، تشخیص تصویر، شبکههای عصبی بازگشتی (Recurrent Neural Networks)، مدلهای دنباله به دنباله برای ترجمه ماشین، پردازش زبان طبیعی و شبیهسازیهای مبتنی بر معادله دیفرانسیل با مشتقات پارهای (PDE) سرنام Partial Differential Equation آموزش داده و اجرا کند.
TensorFlow چگونه کار میکند؟
تنسورفلو به توسعهدهندگان اجازه میدهد تا نمودارهای گردش داده (dataflow graphs) ساختارهایی که چگونگی حرکت دادهها از طریق نمودار را توصیف میکنند یا مجموعهای از گرههای پردازشی را ایجاد کنند. هر گره در این نمودار یک عمل ریاضی را نشان میدهد و هر اتصال یا لبه بین گرهها بیانگر یک آرایه داده چندبعدی یا یک تنسور است. TensorFlow تمامی این امکانات را با زبان برنامهنویسی پایتون در اختیار برنامهنویسان قرار میدهد. یادگیری و کار با پایتون ساده است و روشهای مناسبی برای بیان چگونگی ترکیب انتزاعات سطح بالا (high-level abstractions) با یکدیگر فراهم میکند. گرهها و تنسورها در تنسورفلو اشیا پایتون هستند و اپلیکیشنهای تنسورفلو خودشان اپلیکیشنهای پایتون هستند. با این حال ، عملیات ریاضی واقعی در پایتون انجام نمیشود. کتابخانههایی که تنسورفلو ارائه میکند به زبان قدرتمند سی پلاسپلاس نوشته شدهاند. گوگل برای آنکه عملکرد این کتابخانهها را افزایش دهد به بهترین شکل آنها را بهینهسازی کرده است. پایتون تنها ترافیک بین مولفهها را هدایت میکند و انتزاعات برنامهنویسی سطح بالایی را برای اتصال آنها به یکدیگر فراهم میکند.
اپلیکیشنهای TensorFlow را میتوان روی اکثر پلتفرمهای موجود از قبیل یک ماشین محلی، یک کلاستر در ابر، دستگاههای اندروید و iOS و همچنین پردازندههای مرکزی و پردازندههای گرافیکی اجرا کرد. اگر از ابر اختصاصی گوگل استفاده میکنید این قابلیت را در اختیار دارید تا برای شتاب بیشتر، تنسورفلو را روی واحد پردازش تنسور (TPU) سرنام TensorFlow Processing Unit گوگل که یک مدار مجتمع با کاربرد خاص است اجرا کنید. TPU یک شتابدهنده هوش مصنوعی قابل برنامهریزی است که برای فراهم کردن توان عملیاتی بالا در محاسبات دقت پایین طراحی شده است. در فوریه ۲۰۱۸، گوگل اعلام کرد که در حال ساخت نسخه ویژهای از TPU برای پلتفرم گوگل کلاود است. مدلهای ساخته شده توسط تنسورفلو در اغلب دستگاههایی که برای انجام پیشبینیها به کار گرفته میشوند، قابل استفاده هستند.
TensorFlow 2.0 که نسخه بتای آن ژوئن 2019 منتشر شد با تغییرات نسبتا زیادی همراه بود. این تغییرات بر مبنای بازخوردهای کاربران اعمال شد که برخی از ویژگیهای نسخه پیشین (مثل استفاده از Keras API برای مدل آموزشی) دستخوش تغییرات زیربنایی شدند تا کار با این چهارچوب یادگیری ماشینی راحتتر و قدرتمندتر شود. به لطف یک API جدید آموزش توزیع شده سادهتر شده و با پشتیبانی از TensorFlow Lite که بهطور ویژه برای توسعه موبایل معرفی شده این امکان فراهم شده تا به توان مدلها را در انواع بیشتری از پلتفرمها پیادهسازی کرد. اما کدهای نوشته شده برای نسخههای قبلی تنسورفلو را باید از نو بنويسید (گاهی اوقات با کمی تغییر، گاهی اوقات بهطور کامل) تا بتوانید از تمام مزایای TensorFlow 2.0 بهرهمند شوید.
مزایای تنسورفلو
بزرگترین مزیتی که تنسورفلو برای توسعه یادگیری ماشین فراهم میکند انتزاع (abstraction) است. در دنیای محاسبات کامپیوتری و مهندسی نرمافزار انتزاع به معنای تفکیک مباحث مربوط به هم و نگریستن به موضوع جدای از مباحث وابسته به آن است. انتزاع در مهندسی نرمافزار به مدیریت دقیقتر پیچیدگیها کمک کرده و مانع از آن میشود که مولفههای یک سیستم وابستگی شدید به یکدیگر پیدا کنند. به جای پرداختن به جزییات زیربنایی اجرای الگوریتمها یا کشف راههای مناسب برای وصل کردن خروجی یک تابع به ورودی تابع دیگر، توسعهدهنده میتواند روی منطق کلی برنامه تمرکز کند در حالیکه تنسورفلو در پشت صحنه به جزییات رسیدگی خواهد کرد.
تنسورفلو امکانات دیگری را برای سهولت کار در اختیار توسعه دهندگانی قرار میدهد که میخواهند اپلیکیشنهای تنسورفلو را اشکالزدایی کنند. تاکنون، اشکالزدایی (Debugging) در TensorFlow فرآیند خیلی سختی بود. ساعتهای زیادی زمان میبرد تا به توان کدهای تنسورفلو را اشکالزدایی کرد. اما در نسخه دوم این چهارچوب اشکالزدایی به مراتب سادهتر شده است.
حالت اجرای حریصانه (eager execution) که برای همه دانشجویان رشته هوش مصنوعی نام آشنا است، این امکان را میدهد تا به جای ساخت کل نمودار به عنوان یک شی کدر و مات و ارزیابی یکباره آن، همه عملکردهای نمودار را بهطور جداگانه و شفاف ارزیابی و اصلاح کنید. برای ساخت یک شبکه عصبی در نسخه 1.x این فریم ورک باید یک ساختار داده انتزاعی بهنام نمودار (Graph) را تعریف میکردید. همچنین اگر شما تلاش میکردید از یکی از گرههای این نمودار خروجی بگیرید، مقادیری که انتظار داشتید را به دست نمیآوردید. برای اجرای این Graph به یک خلاصهساز بهنام Session نیاز داشتیم و با استفاده از متد Session.run() میتوانستیم دادههای پایتون را به این Graph وارد کنیم. eager execution این رویه را تغییر داد. اکنون کدهای تنسورفلو میتوانند مثل کدهای عادی پایتون اجرا شوند. کدهای TensorFlow 2.0 شباهت زیادی به کدهای NumPy دارند. اشیا NumPy و TensorFlow را میتوان به سادگی با یکدیگر مبادله کرد.
مصورسازی TensorBoard اجازه میدهد تا نحوه عملکرد نمودارها را از طریق یک داشبورد تعاملی و مبتنی بر وب بررسی و نمایهسازی کنید. توسعهدهندگان میتوانند در نسخه جدید از متد fit() برای تعریف و تنظیم یک نمونه از TensorBoard استفاده کنند. توسعهدهنده TensorBoard را به صورت بازگشتی به متد fit اضافه میکند. مادامی که از متد fit() استفاده میشود، متد فوق به هر دو صورت رابط کاربردی برنامهنویسی متوالی (Sequential) و رابط کاربری برنامهنویسی فرعی (Subclassing) کار خواهد کرد.
امکانات جانبی همراه با تنسورفلو
تنسورفلو به پشتوانه فهرستی از محصولات تجاری توسعه یافته در گوگل (A-list) مزایای زیادی به دست آورد. این محصولات تجاری توانستند به خوبی قدرت تنسورفلور را نشان دهند. گوگل نه تنها به روند پیشرفت این پروژه سرعت بخشیده، بلکه قابلیتهای جانبی قابلملاحظهای برای تنسورفلو ارائه کرده که امکان استقرار و استفاده از این چهارچوب را آسانتر میکند.
بهینهسازی API
قوانین نامگذاری خاص متعددی برای تنسورفلو وجود دارد که در بسیاری از موارد، کاربران هنگام استفاده از TensorFlow نمیدانند که دقیقا از کدام API استفاده کنند. این مساله معمولا به دلایلی مثل اضافه شدن بیش از حد بستههای جدید، منسوخ شدن رابطهای کاربردی برنامهنویسی و تغییر نام متعدد رابطهای کاربردی برنامهنویسی رخ میدهد. در آخرین نسخه از تنسورفلو بسیاری از رابطهای کاربردی برنامهنویسی شبیه به tf.gans، tf.app، tf.contrib، tf.flags یا حذف شده یا به مخازن جدید منتقل شدهاند. برخی از رابطهای کاربردی برنامهنویسی نیز با معادل ۲.۰ خود جایگزین شدهاند که از آن جمله میتوان به tf.keras.metrics ، tf.summary و tf.keras.optimizers اشاره کرد. اما یکی از مهمترین اصلاحات صورت گرفته مربوط به نحوه ساخت مدلها است.
رابط کاربردی برنامهنویسی مقدماتی از نسخه 1.x به 2.0 تغییر چندانی نداشت، اما حالا Keras به رابط کاربردی برنامهنویسی پیشفرض تبدیل شده است. Keras مجموعهای از لایهها است که نحوه ساخت شبکههای عصبی با استفاده از یک استاندارد مشخص را توصیف میکند. Keras-tuner
نیز یک کتابخانه اختصاصی برای افزایش پارامترهای بهینهسازی مدلهای Keras است که در حال حاضر مراحل مقدماتی خود را پشت سر میگذارد و به خوبی با نسخه بتای Tensorflow 2.0 سازگار است.
Stay Informed
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
نظرات