یادگیری ماشین با تنسرفلو | TensorFlow
یادگیری ماشین یکی از مباحث سنگین و پیچیده دنیای هوش مصنوعی است، اما به لطف چهارچوبهای غنی و قدرتمندی که تولید شده پیادهسازی مدلهای یادگیری ماشین به مراتب سادهتر از گذشته شدهاند. چهارچوبهایی شبیه به تنسورفلو (TensorFlow) روند دستیابی به دادهها، مدلهای آموزشی، ارائه پیشبینیها و پالایش نتایج را سهولت بخشیدهاند.
سایت رسمی تنسورفلو: TensorFlow
«تنسورفلو» (TensorFlow)، یک کتابخانه رایگان و «متنباز» (Open Source) برای «برنامهنویسی جریان داده» ( Dataflow Programming) و «برنامهنویسی متمایزگر» (Differentiable Programming)، جهت انجام طیف وسیعی از وظایف است. تنسورفلو، کتابخانهای برای «ریاضیات نمادین» (Symbolic Math) محسوب میشود و کاربردهای گوناگونی در «یادگیری ماشین» (Machine Learning) دارد که از آن جمله میتوان به پیادهسازی «شبکههای عصبی» (Neural Networks) اشاره کرد. این کتابخانه توسط تیم «گوگل برین» (Google Brain)، برای مصارف داخلی گوگل توسعه داده شده بود؛ ولی در نهم نوامبر سال ۲۰۱۵ با گواهینامه «آپاچی ۲.۰ متنباز» منتشر شد. در حال حاضر، کتابخانه تنسورفلو، در گوگل هم برای پروژههای تحقیقاتی و هم پروژههای عملیاتی مورد استفاده قرار میگیرد.
نحوه کارکرد TensorFlow
[um_loggedin] تنسورفلو به توسعهدهندگان اجازه میدهد تا نمودارهای گردش داده (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 بهرهمند شوید. [/um_loggedin]
تنسورفلو نسخه 1.0.0
نسخه ۱.۰.۰ تنسورفلو، یازدهم فوریه سال ۲۰۱۷ منتشر شد. با وجود آنکه «پیادهسازی مرجع» (Reference Implementation) این کتابخانه در «دستگاههای مجرد« (Single Devices) اجرا میشد، این نسخه قابل اجرا روی چندین CPU و GPU (با افزونههای اختیاری CUDA و SYCL برای انجام پردازشهای همه منظوره روی واحد پردازنده گرافیکی) بود. کتابخانه تنسورفلو برای سیستمعاملهای ۶۴ بیتی لینوکس، ویندوز، مکاواس و پلتفرمهای موبایل مانند اندروید و iOS موجود است.
این کتابخانه دارای معماری انعطافپذیری است که امکان توسعه آسان آن را برای پلتفرمهای گوناگون (GPU ،CPU و TPU)، و از دسکتاپ گرفته تا خوشهای از سرورها، موبایلها و دستگاههای جدید و لبه علم، فراهم میکند. محاسبات تنسورفلو به صورت «گرافهای جریان داده حالتمند» (Stateful Dataflow Graphs) بیان میشود. نام تنسورفلو از عملیاتی گرفته شده است که شبکههای عصبی روی آرایههای داده چندبعدی که از آنها با عنوان تانسور یاد میشود، انجام میدهند. در کنفرانس گوگل I/O که در ژوئن ۲۰۱۸ برگزار شد، «جف دین» (Jeff Dean) بیان کرد که ۱۵۰۰ مخزن در «گیتهاب» (GitHub)، از تنسورفلو نام بردهاند (آن را منشن کردهاند) که تنها پنج مورد از آنها توسط گوگل بوده است.
تنسورفلو ۲.۰
«تنسورفلو دِو سامیت» (TensorFlow Dev Summit) گردهمایی است که هر سال فعالان حوزه یادگیری ماشین را از سراسر جهان به مدت دو روز گردهم میآورد. در این رویداد، شرکتکنندگان به گفتگوهای فنی سطح بالا، ارائه دموها و گفتگو با تیم و جامعه تنسورفلو میپردازند. در رویداد سال ۲۰۱۹، گوگل نسخه آلفا از تنسورفلو ۲.۰ را معرفی کرد. نسخه جدید با تمرکز بر افزایش بهرهوری توسعهدهندگان، سادگی و سهولت استفاده طراحی شده است. تغییراتی در تنسورفلو ۲.۰ به وقوع پیوسته که موجب افزایش بهرهوری کاربران آن میشود. همچنین، تغییرات متعددی در API آن انجام شده که از آن جمله میتوان به مرتبسازی مجدد آرگومانها، حذف APIهای زائد، تغییر نام سمبلها و تغییر مقادیر پیشفرض برای پارامترها اشاره کرد. در ادامه برخی از مهمترین تغییرات به وقوع پیوسته در تنسورفلو ۲.۰ بیان میشوند.
واحد پردازش تانسور (TPU)
[um_loggedin]
شما به این سطح از محتوا دسترسی ندارید و یا وارد اکانت خود نشدید. بخشی از محتوا مختص اعضاء و مشترکین میباشد.
خرید یا تمدید اشتراک | ورود یا عضویت
.: برای دانلود کاتالوگ آشنایی بامحتوای دیزاین کلاب اینجا کلیک کنید :.
کاربردهای تنسور فلو
[um_loggedin] گوگل به طور رسمی الگوریتم «رنکبرین» (RankBrain) را ۲۶ اکتبر ۲۰۱۵ منتشر کرد که توسط تنسورفلو حمایت میشد. همچنین، «کلبریتوری» (Colaboratory | Colab) که یک «محیط نوتبوک ژوپیتر تنسورفلو» (TensorFlow Jupyter Notebook Environment) است را معرفی کرد که برای استفاده از آن، نیازی به نصب نیست. این محیط روی «ابر» (Cloud) اجرا میشود و نوتبوکهای خود را روی گوگل درایو ذخیره میکند. با وجود آنکه «کُلَب» (Colaboratory) بخشی از پروژه ژوپیتر است، اما توسعه آن توسط گوگل انجام میشود. از سپتامبر ۲۰۱۸، کلب فقط از کرنلهای پایتون ۲ و پایتون ۳ پشتیبانی میکند و دیگر کرنلهای ژوپیتر، یعنی «جولیا» (Julia) و «R» را پشتیبانی نمیکند. [/um_loggedin]
ویژگیها و مزایای تنسور فلو
[um_loggedin] بزرگترین مزیتی که تنسورفلو برای توسعه یادگیری ماشین فراهم میکند انتزاع (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) کار خواهد کرد.
کتابخانه تنسورفلو دارای «رابطهای برنامهنویسی کاربردی» (Application programming interface | API) پایدار برای «زبان برنامهنویسی پایتون» (Python Programming Language) و زبان C و همچنین، رابطهای فاقد تضمین «سازگاری عقبرو» (backward compatible) رابط برنامهنویسی کاربردی برای ++C، «گو» (Go)، «جاوا» (Java)، «جاوا اسکریپت» (JavaScript) و «سوئیفت» (Swift) است. همچنین، دارای «بستههای شخص ثالث» (Third Party Packages) برای «سیشارپ» (#C)، «هسکل» (Haskell)، «جولیا» (Julia)، «آر» (R)، «اسکالا» (Scala)، «راست» (Rust)، «اکمل» (OCaml) و «کریستال» (Crystal) است.[/um_loggedin]
برنامههای کاربردی
برنامههای کاربردی متعددی از تنسورفلو قدرت گرفتهاند که از این میان میتوان به نرمافزارهای توضیحات نویسی خوکار برای تصاویر، مانند «دیپدریم» (DeepDream) اشاره کرد. الگوریتم مبتنی بر یادگیری ماشین موتور جستجو با عنوان رنک برین (RankBrain) نیز مثال دیگری است که تعداد قابل توجهی از کوئریهای جستجو، جایگزینی و تکمیل نتایج جستجوی مبتنی بر الگوریتمهای ایستای سنتی را فراهم میکند.
تنسورفلو در مقابل رقبایش
تنسورفلو با تعداد دیگری از چهارچوبهای یادگیری ماشین در حال رقابت است. PyTorch، CNTK و MXNet سه نمونه از اصلیترین رقبای آن هستند که خدمات تقریبا یکسانی را ارائه میکنند:
- PyTorch: علاوه بر ساخته شدن توسط پایتون، شباهتهای زیادی با تنسورفلو دارد. تجهيزات شتابدهنده سختافزاری، یک مدل توسعه تعاملی که امکان طراحی رابطهای کاربردی را فراهم میکند و امکانات مفید دیگری که این چهارچوب ارائه میکند دست کمی از تنسورفلو ندارند. اساسا PyTorch انتخاب بهتری برای توسعه سریع پروژههایی است که در کوتاه مدت نیاز به پیادهسازی و اجرا دارند، اما تنسورفلو برای پروژههای بزرگتر و پیچیدهتر بهتر عمل میکند.
- CNTK، جعبه ابزار شناختی مایکروسافت نیز مثل تنسورفلو از یک ساختار نمودار برای توصیف جریان داده استفاده میکند، اما بیشتر روی ساخت شبکههای عصبی یادگیری عمیق تمرکز دارد. CNTK خیلی از کارهای شبکه عصبی را با سرعت بیشتری مدیریت میکند و از مجموعه رابطهای کاربردی برنامهنویسی گستردهتری (پایتون، سیپلاسپلاس، سیشارپ و جاوا) پشتیبانی میکند، اما در حال حاضر یادگیری و پیادهسازی CNTK به راحتی TensorFlow نیست.
- Apache MXNet، این چهارچوب که توسط آمازون به عنوان چهارچوب اصلی یادگیری عمیق در AWS ارائه شده، قادر است از چند پردازنده گرافیکی و چند ماشین استفاده کند. همچنین از طیف نسبتا گستردهای از زبانها شبیه به پایتون، سیپلاسپلاس، اسکالا، آر، جاوااسکریپت، جولیا، پرل و گو پشتیبانی میکند. هر چند کار با رابطهای کاربردی برنامهنویسی اصلی آن به راحتی رابطهای کاربردی برنامهنویسی TensorFlow نیست.