تنسور فلو(TensorFlow) یک کتابخانه نرم افزاری متن باز برای محاسبات عددی با استفاده از گراف جریان داده ای است معماری انعطاف پذیر این کتابخانه به شما این امکان را فراهم می کند که با استفاده از یک APIمحاسبات خود را بر روی یک یا چند CPU یا کارت گرافیکی (GPU) در یک کامپیوتر رومیزی، سرور و یا موبایل توزیع و پردازش کنید.
یکی از چالشهایی که اوایل یادگیری تنسورفلو داشتم این بود که متوجه عملکرداش نمیشدم! خیلی با اون چیزایی که من تو برنامهنویسی یاد گرفته بودم متفاوت بود. آموزش خوبی هم پیدا نمیشد که از پایه مفاهیم رو توضیح داده باشند. اغلب آموزشها هم با مفاهیمی مثل سشن (session)، گراف محاسباتی شروع میکرند که برای من تازگی داشت و متوجه نمیشدم. مشکلات مفاهیم به کنار دیباگ برنامه و عدم استفاده از عبارتهای پایتونی و عدم نصب تنسورفلو روی ویندوز واقعا کلافهام کرده بود و سرعتم برای یادگیری خیلی پایین بود! هرچقدر این در و اون در میزدم اونجوری که باید بود پیش نمیرفت این شد سراغ فریمورک های دیگه رفتم. ولی در حین یادگیری، کلی خبرهای خوب و به روزرسانی های زیاد و پیادهسازی مقالات با تنسورفلو میامد که من رو به شک وا میداشت که آیا تنسورفلو را دوباره شروع کنم یا نه!! از طرف دیگه پایتورچ هم توسط فیسبوک ارائه شد و خیلی از محققان از اون استفاده میکرند. مشکلات تنسورفلو از یک طرف و راحتی فریمورکهای دیگه از طرف دیگه باعث میشد فکر کنم عاقبت تنسورفلو شکسته ولی چون گوگل ازش پشتیبانی میکرد نمیشد دست کم اش گرفت و این شد که بعد از مدتی باز به تنسورفلو برگشتم!
خوشبختانه گوگل در ۲۰۱۷ یک قابل جدید به نام اجرای حریصانه (eager execution) رو به تنسورفلو اضافه کرد و باعث شد خیلی از سختیهای که وجود داشت کم بشه! و در حال حاضر به نظرم راحتترین راه استفاده از تنسورفلو استفاده از حالت اجرای حریصانه (eager execution) است. از تنسورفلو نسخه ۲، که احتمالا تا چند وقت دیگه ارائه میشه به صورت پیشفرض روی حالت حریصانه خواهد بود. و به نظرم افراد و شرکت هایی که از تنسورفلو بخاطر مشکلاتش استفاده نمیکردند در طی یکی دو سال آینده به آن روی خواهند آورد!
از اونجایی که فک میکنم اجرای حریصانه (eager execution) روش قالب تنسورفلو خواهد بود در این آموزش تمام مثالها با کمک eager execution توضیح داده خواهد شد.
۱) آموزش نصب تنسورفلو
بهترین (و البته به روزترین) راه برای نصب تنسورفلو مراجعه به سایت رسمی تنسورفلو است به نشانی https://www.tensorflow.org/install تنسورفلو از زبانهای مختلفی مثل پایتون، جاوا، گو (Go) و … پشتیبانی میکند و روی سیستمهای عاملهای مختلف مثل ویندوز، لینوکس و مک قابل اجراست (روی نسخه مک از جیپییو پیشتیبانی نمیکند). که در این آموزش ما با پایتون کار خواهیم کرد.
۱-۱) نصب سریع (بدون جیپییو)
اگر میخواهید تنسورفلو رو روی کامپیوتر شخصی یا لپتاپاتون نصب کنید و جیپییو ندارید میتونید خیلی راحت مراحل زیر انجام بدید:
الف) پایتون رو دانلود و نصب کنید (ترجیحا پایتون ۳.۶ به بعد رو نصب کنید). برای نصب پایتون میتونید به وبسایتhttps://www.python.orgمراجعه کنید و متناسب با سیستم عاملتون نسخه مورد نظر رو نصب کنید.
ب) پایچارم (pycharm) رو دانلود و نصب کنید. راستش نصب پایچارم یا هر IDE دیگری ضرروی نیست ولی خیلی کد زدن رو برای شما خیلی راحت میکنه! برای نصب پایچارم میتونید به سایت jetbrain.com برید و اگر میخواهید نسخه فول ادیشن رو داشته باشید (و دانشجو هستید) میتونید به https://www.jetbrains.com/student برید تا به طور رایگان به شما لایسنس استفاده دهد.
ج) محیط مجازی (virtual environment) رو نصب کنید. محیط مجازی اصن چه بدرد میخوره؟ فرض کنید در یکی از پروژههاتون از تنسورفلو نسخه ۰.۱۰ استفاده کردید و در یکی دیگه از تنسورفلو نسخه ۱.۱۰.مساله ای که خیلی متداول است اینه که اگر تنسورفلو خودتون رو به روزرسانی کنید خیلی از کدهایی که قبلا زدید اجرا نمیشن و اصلاحا کدهایی که زدید backward compatible نیستند. از طرف دیگه اگر نسخه اتون رو کاهش بدید به ۱.۱۰تبدیل کنیدخیلی از ویژگیهای جدید رو از دست میدهید.برای رفع این مشکل درپایتون معمولا از محیط مجازی یا virtual environment استفاده میکنند. به صورت پیشفرض محیط مجازی با پایتون نصب نمیشه و بخاطر همین مجبوریم که خودمون نصب کنیم.
برای انتخاب محیط مجازی دوتا انتخاب دارید یا از اناکوندا (anaconda) استفاده کنید یا مستقیم خودتون اون رو نصب کنید. پکیج کامل anacondaشامل پکیجهای مختلف لازم برای دیتاساینس هست که معمولا بیشتر از نیاز شما هست (البته نسخه miniconda هم وجود دارد که سبکتر است). ولی من اغلب ترجیح میدم که پکیجهای خودم لازم دارم خودم نصب کنم. بخاطر همین از virtualenv استفاده می کنم
کامند (command prompt) یا ترمینال (terminal) رو بازکنید و یکی (فقط یکی!) از دستورات زیر را اجرا کنید (در صورتی که در سیستمهای یونیکس sudo هم اولش بزارید).
# only install one of the following environement manager!
[sudo] pip install virtualenv
[sudo] pip install anaconda
د) پایچارم (pycharm) رو اجرا کنید بعد از کلیک روی گزینه create new projcet و یک پروژه بسازید. همچنین دقت کنید که هنگام ساخت پروژه محیط مجازی خودتون هم ایجاد کنید. برای اینکار روی project interpreter کلیک کنید نوع پایتون رو مشخص کنید و اسم پروژه اتون هم هرچی که دوست داشتید قرار بدید و در نهایت هم روی گزینه create کلیک کنید.
در شکل بالا من از virtualenv استفاده کردم. در صورتی که شما از anaconda نصب کردید مرحله بعد رو لازم نیست انجام بدید و میتونید یک فایل پایتون ایجاد کنید و شروع کنید به کد زدن!
ه ) ولی در صورتی که virtualenv استفاده کردید باید تنسورفلو رو نصب کنید. نصب تنسورفلو خیلی راحت است و کافی است در داخل محیط pycharm ترمینال رو باز کنید (alt+f12) رو بزنید و سپس در داخل اون دستور sudo pip install tensorflow رو اجرا کنید:
همانطورکه نگاه میکنیداول ادرس شما (venv)قرار داده است که به این معناست که هر پکیجی که نصب کنید در داخل venv قرارخواهد گرفت.در نتیجه وقتی دستور sudo pip install tensorflow را اجرا میکنید اخرین ورژن تنسورفلو در داخل این پکیج برای شما ساخته میشود و با مابقی پروژههای شما هیچ کاری نخواهدداشت به همین راحتی! حالا شمامیتونید یک فایل پایتون (py) ایجاد کنید و شروع کنید به کد زدن!
۲) به روزرسانی تنسورفلو
اگر مراحل بالا رو قبلا انجام دادید و بعد از مدتی باز میخواهید شروع کنید به کد زدن شاید بد نباشه که آن را به روزرسانی کنید. برای به روزرسانی به آخرین نسخه میتونید از دستور زیر استفاده کنید:
[sudo] pip install tensorflow --upgrade
نکته: به روزرسانی تنسورفلو یکم خطرناکه و ممکن است کدهایی که قبلا زدید دیگه کار نکن یا به مشکل بخورید! کلا پکیجهای یادگیری عمیق چون خیلی زود به روزرسانی میشن backward compatibility خوبی ندارند و به این موضوع دقت کنید.
برای نصب تنسورفلو [sudo] pip install tensorflow==1.12.0
۳) سلام دنیا در تنسورفلو
امیدوارم که تونسته باشید با موفقیت تنسورفلو را نصب/بروزرسانی کنید.
یک پروژه در پایچارم (pycharm) درست کنید و یک فایل پایتون (.py) ایجاد کنید و اولین برنامه خودتون رو در اون بنویسید.
اولین برنامه میتونه سلام دنیا باشه یا اگر خیلی دیپلرنینگ طور دوست دارید میتونید یک جمع ساده باشه:
همانطور که در بالا مشاهده میکنید خروجی شما tf.Tensor هست که از سه قسمت تشکیل شده است: ۱) مقدار ۲) اندازه (shape) و ۳) نوع داده (dtype). بعد از این احتمالا خواهید دید که در تنسورفلو همه چیز Tensor است!
۴) مثال مقدماتی در Tensorflow
خوب اگر موارد بالا بلد هستید بیایید یک جمع خیلی ساده رو با تنسورفلو انجام بدیم. کاری که میخواهیم بکنیم این است که دو تا ماتریس ۲*۲ را باهم جمع کنیم:
import tensorflow as tf
tf.enable_eager_execution()
a = tf.constant([[1, 3], [5, 7]])
b = tf.constant([[2, 4], [6, 8]])
c = tf.add(a, b) # Add two tensorprint(c)
d = tf.multiply(a, b) # multiply two tensorprint(d)
########### output #############>>>
>>>tf.Tensor([[ 3 7]
[11 15]], shape=(2, 2), dtype=int32)
>>> tf.Tensor([[ 2 12]
[30 56]], shape=(2, 2), dtype=int32)
کد بالا ما ۲ تا تنسور (Tensor) به نامهای a و b تعریف کردیم و به ترتیب عملگرهای جمع و ضرب ماتریسی را روی آنها انجام دادیم. نتایج عملگرها در تنسورهای d و c ذخیره وسپس نمایش داده شدند.