یادگیری عمیق با پایتون
کارگاه یادگیری عمیق با پایتون
دی ۲۶, ۱۳۹۶
واژه‌نامه یادگیری عمیق
اردیبهشت ۱۴, ۱۳۹۷
گوگل کولب

مقدمه درباره محیط گوگل کولب

محیط گوگل کولب یکی از خدمات جدید گوگل است که به شما امکان می‌دهد از سرویس‌دهنده‌های قدرتمند گوگل برای استفاده از جی‌پی‌یو به صورت رایگان بهره ببرید. مطالبی که در اینجا بیان می‌شود، بیشتر به صورت کلی بوده و در کاربرد‌های دیگر گوگل کولب مانند کد‌هایی که خودتان خواهید نوشت، می‌تواند مورد توجه قرار بگیرد. در واقع، بیشتر کاربران این محیط کسانی هستند که در سیستم شخصی خودشان، پردازنده های گرافیکی قوی ندارند و موقع کار با ساختار شبکه‌های عصبی و به‌خصوص شبکه‌های عصبی عمیق به مشکل جدی برخورد می‌کنند. از این رو، با توجه به اینکه گوگل کولب به صورت رایگان در دسترس عموم قرار داشته و همچنین از سیستم نسبتا قدرتمندی برخوردار است، می‌تواند جایگزین بسیار مناسبی برای سیستم شخصی این افراد به شمار رود.

محدودیت‌ها

البته، یک سری محدودیت‌ها به ویژه برای کاربران ایرانی وجود دارد که کمی کار کردن با آن را با مشکل روبرو کرده است. محیطی که در اختیار کاربران قرار داده، درست مثل محیط ژوپیتر نوت‌بوکی است که کسانی که به زبان پایتون برنامه نویسی می‌کنند، کاملا با این محیط آشنا هستند. در گوشه سمت راست این نوت‌بوک دکمه اتصال یا connect وجود دارد که با زدن این دکمه نوت‌بوک متصل شده و روی یک ماشین مجازی اجرا می‌شود. این نوت‌بوک به صورت مداوم به مدت ۱۲ ساعت می‌تواند متصل باقی بماند و بعد از این مدت بایستی یک ماشین مجازی جدید به آن اختصاص یابد و این به این معنی است که تمامی اعمالی که در داخل نوت بوک صورت گرفته بایستی مجددا انجام بگیرد.

محدودیت دیگری که بر روی این محیط اعمال کرده‌اند، تغییر ماشین مجازی نوت‌بوک است، چنانچه نوت‌بوک به مدت ۹۰ دقیقه بعد از آخرین اتصال خود در حالت قطع اتصال قرار بگیرد. از محدودیت‌هایی که می‌توان بیشتر برای کاربران ایرانی عنوان کرد، اعمال تحریم‌ها از سوی گوگل و لزوم استفاده از وی‌پی‌ان‌ها یا فیلترشکن‌ها موقع استفاده آن و به تبع آن سرعت پایین اینترنت و قطع اتصال شدن‌های نسبتاً زیاد نوت‌بوک در هنگام استفاده و ایجاد مشکلاتی نطیر آن است.

امّا مسئله‌ای که شاید مهمترین چالش برای کاربران ایرانی در هنگام استفاده از سرویس گوگل کولب باشد، آپلود داده‌های حجیم برای کار کردن روی آن‌ها باشد. گوگل کولب برای کار با داده‌ها از محیط «گوگل درایو» استفاده می‌کند. در واقع داده‌ها روی گوگل درایو آپلود می‌شوند و سپس با احراز هویتی که در محیط گوگل کولب صورت می‌گیرد، راه ارتباط با گوگل درایو را هموار می‌سازد و بعد از این مرحله هیچ فرقی با سیستم شخصی شما نداشته و انگار داده‌ها را در جایی از کامپیوتر خود ذخیره نموده‌اید و با مشخص کردن مسیر داده‌ها، به آن‌ها از طریق کد دسترسی پیدا می‌کنید. با توجه به وضعیت تحریم از سوی گوگل و سرعت نه چندان مناسب اینترنت در کشور، آپلود داده‌هایی با حجم بزرگ ( توجه داشته باشید که مجموعه داده‌های مورد استفاده برای کار در حوزه هوش مصنوعی بایستی به حد کافی بزرگ باشند تا بتوان روی آن‌ها آموزش مناسب داده شود)، یک مشکل اساسی به شمار می‌رود.

بنابراین چنانچه قصد استفاده از این سرویس را دارید، به هر نحوی که شده بایستی مشکلات آن را تا حد امکان برطرف سازید. ما نیز در اینجا فرض را بر این گذاشته‌ایم که شما داده‌های خود را آپلود شده در گوگل درایو در اختیار داشته و در این نوشته تنها شیوه برقراری ارتباط بین گوگل کولب و گوگل درایو مورد بحث است.

مراحل ایجاد یک نوت‌بوک و کار کردن با آن

ابتدا مطمئن شوید به حساب جی‌میل خود متصل هستید و سپس به گوگل درایو مرتبط با حساب جی‌میل خود بروید. توجه داشته باشید که در تمام طول کار، بایستی وی‌پی‌ان یا فیلترشکن روشن باشد. در محیط گوگل درایو، یک پوشه برای تمرین اول اختصاص دهید تا داده‌هایی را که بروی درایو خود آپلود کرده‌اید، داخل آن پوشه قرار دهید. بنابراین بایستی دو پوشه جداگانه train و test در داخل پوشه‌ای که ایجاد کرده‌اید وجود داشته باشند. در داخل فولدر ایجاد شده طبق آنچه در شکل زیر می‌بینید با راست کلیک روی صفحه یک نوت‌بوک کولب را ایجاد کنید.

ایجاد یک نوت‌بوک در محیط گوگل کولب

 

بعد از ایجاد آن، صفحه‌ای باز خواهد شد. قبل از اینکه سراغ کدنویسی داخل آن بروید، بایستی تنظیمات استفاده از «جی‌پی‌یو» را در نوت‌بوک فعال نمایید. در زیر مراحل این تنظیمات مشخص شده است :

 

انتحاب جی‌پی‌یو در محیط گوگل کولب

 

ذخیره انتخاب جی‌پی‌یو

 

بعد از اینکه گزینه Save را انتخاب کردید، می توانید از دکمه سمت راست موجود در نوت‌بوک برای متصل شدن به نوت‌بوک استفاده نمایید.

نوت‌بوک گوگل کولب همانند ژوپیتر نوت‌بوک، سلول‌ها یا خانه‌هایی دارد که می‌توان داخل آن‌ها کدنویسی کرد. اگر از طریق ماوس خود به قسمت پایین هر سلول بروید، گزینه اضافه کردن سلول جدید نیز ظاهر خواهد شد.

  • به طور کلی در تمام استفاده‌های خود با گوگل کولب، بهتر است سلول‌های اولیه را به نصب پکیج‌های لازم در طول برنامه‌تان اختصاص دهید. بدیهی است که در حین کدنویسی و مواجه شدن با شرایط مختلف نصب، یک سری پکیج خاص مورد نیاز خواهد بود؛ امّا توصیه می‌شود بعد از آنکه کلیات برنامه‌تان در دفعات ابتدایی مشخص شد و پکیج‌های لازم تشخیص داده شد، همه آن‌ها را به سلول‌های ابتدایی انتقال دهید و در آنجا نگه دارید تا در دفعات بعدی که نوت‌بوک را باز کردید و قصد کار کردن با آن را داشتید، بدون دردسر پکیج های مورد نیاز را نصب و سپس شروع به ادامه کار کنید تا هربار با خطا های متعدد روبرو نشوید.

پکیج هایی که در این تمرین و داخل فایل‌های کنار فایل اصلی  تشخیص داده شده به صورت زیر بوده و کد مربوط به نصب این پکیج‌ها نیز مشاهده می‌شود:

 

این سه پکیج که در تصویر مشاهده می‌کنید در بخش‌های گوناگون کدهای مربوط به تمرین اول مورد استفاده فرار گرفته‌اند. بقیه پکیج‌ها در گوگل کولب به صورت پیش‌فرض نصب هستند. بعد از وارد کردن این سه خط کد، دکمه اجرا (دکمه با نماد مثلث) واقع در سمت چپ سلول را بزنید تا کدها اجرا شوند.

نصب کتابخانه پای‌تورچ

چون کد‌های تمرین اول به وسیله کتابخانه «پای‌تورچ» نوشته شده‌اند، این کتابخانه نیز بایستی روی نوت‌بوک نصب شود.

 

نصب کتابخانه‌ها در محیط گوگل کولب

 

نصب پای‌تورچ در محیط گوگل کولب

 

 

همان‌گونه که می‌بینید در دو سلول جداگانه، این کتابخانه نصب شده است. امّا هنگام نصب کتابخانه «تورچ ویژن»، همانطور که در شکل نیز نشان داده شده است، پکیج pillow نسخه ۵ نیز نصب می‌شود. آن‌طور که بنده طبق تجربه مشاهده کردم، این بود که گوگل کولب با نسخه ۵ این پکیج مشکل دارد و نسخه سازگار نسخه ۴ این پکیج است. بنابراین بعد از نصب پای‌تورچ ضروری است که نسخه ۴ پکیج pillow را نیز نصب نمایید.

 

 

در این مرحله، نصب پکیج‌های مورد نیاز به پایان رسیده است.

کتابخانه‌های جانبی

بعد از این مرحله، می‌رسیم به آپلود کردن یک سری فایل مورد نیاز کنار فایل اصلی که در اختیار داریم. همانطور که تا به حال می‌دانید، در تمرین اول تعدادی فایل پایتون داده شده‌اند که داخل آن‌ها یک سری توابع تعریف شده و به صورت ماژول‌های آماده درست مثل پکیج‌های نصب شده در قسمت قبلی، در اختیار قرار دارند تا بتوانیم از آن‌ها نیز بهره ببریم. استفاده از آن‌ها می‌تواند به دو صورت ممکن شود. یکی اینکه درست مثل لپ‌تاپ شخصی آن‌ها را در مسیر دایرکتوری قرار دهیم که در اینجا همان گذاشتن آن‌ها در گوگل درایو، داخل پوشه‌ای که درست کردیم و دیگری که به نظر راه بهتر و راحت‌تری نیز هست، آپلود کردن مستقیم آن‌ها داخل نوت‌بوک و استفاده کردن از آن‌ها می‌باشد. در واقع روشی که گفته شد، بیشتر زمانی‌که داده‌های نه چندان بزرگی داریم و می‌‌خواهیم به آن‌ها دسترسی داشته باشیم، مورد استفاده قرار می‌گیرد. توجه داشته باشید که از این روش تنها برای کاربردهای سریع و بلافاصله‌ای استفاده کنید؛ زیرا همانطور که گفته شد بعد از اینکه ماشین مجازی جدید اجرا شد، بایستی دوباره آن‌ها را آپلود کنید. بنابراین برای مثال آپلود مجموعه داده‌ای که حجم بزرگی دارد اولا امکان‌پذیر نبوده و حتی با فرض امکان‌پذیر بودن آن بایستی هر بار با اجرای تازه نوت‌بوک مجدداً آن را آپلود کنید.

 

 

بعد از اجرای سلول بالایی، دکمه Choose File روشن شده و می‌توانید هر تعداد فایل آپلود کنید. این فایل‌ها در خود نوت‌بوک ذخیره می‌شوند. بعد از انجام آن، برای مشاهده لیست فایل های موجود در نوت‌بوک با دستور ls!، می‌توانید آنچه را که آپلود کرده‌اید ببینید.

توجه: با توجه به اینکه در فایل‌های data_utils.py و train.py، تغییراتی اعمال خواهد شد، بنابراین بهتر است موقتاً آن‌ها را آپلود نکنید و بعد از انجام تغییرات دوباره به همین سلول برگشته و آن را اجرا کرده و تنها این دو فایل را آپلود کنید.

استفاده از مجموعه داده‌ها

مرحله بعدی که بسیار مهم نیز هست، ایجاد ارتباط بین گوگل کولب و گوگل درایو برای امکان دسترسی به داده‌های مورد نیاز می‌باشد. طبق اسناد موجود دو روش کلی برای این کار وجود دارد که ما در اینجا به یکی از آن‌ها یعنی بهره‌گیری از «درایو فیوز»، اشاره می‌کنیم.

 

 

در این قسمت پکیج‌های مورد نیاز درایو فیوز نصب می‌شوند. در دو قسمت بعدی که در زیر مشاهده می‌کنید، احراز هویت با حساب کاربری جی‌میل شما صورت می‌گیرد. بدین صورت که با اجرای آن‌ها یک لینک قابل کلیک مشاهده خواهد شد. با زدن روی آن‌ها صفحه‌ای باز می‌شود که اجازه دسترسی را از شما می‌پرسد. درصورت صدور اجازه از طرف شما، یک کد به صورت رشته‌ طولانی تولید می‌شود که بایستی آن را کپی کرده و در نوت‌بوک و زیر آن لینکی که کلیک کرده‌اید، در قاب مشخص شده کپی نموده و Enter را بزنید. این کار را دو بار در هریک از سلول‌های زیر انجام خواهید داد.

 

 

با انجام این سه مرحله ارتباط شما با گوگل درایو صورت می‌پذیرد. برای حصول اطمینان می‌توانید لیست فایل‌ها و پوشه‌های موجود در مسیر مشخص شده توسط خود را مشاهده کنید. توجه داشته باشید که مسیر root در درایو با drive/ مشخص می‌شود و پوشه‌های بعدی، پس از آن نوشته می‌شود. برای نمونه، پوشه PlantSeedling به صورت drive/PlantSeedling/ مشخص می‌گردد.

 

 

ایجاد مجموعه اعتبارسنجی

یکی از کار‌هایی که حتما بایستی انجام بگیرد، تخصیص بخشی از داده‌های آموزشی به عنوان داده‌های اعتبار‌سنجی است. برای این کار تابع create_validation_data در داخل فایل data_utils.py نوشته شده است. با اجرای این تابع، در مسیری که با عنوان val_dir دومین آرگومان ورودی تابع است، فولدری با آن نام در صورت عدم وجود آن ( می‌توانید در گوگل درایو به صورت دستی فولدر valid را درست کنید یا اینکه تابع خود در قسمت os.mkdir(val_dir) این کار را انجام دهد) ایجاد می‌شود.

 

 

 

11 ديدگاه

  1. کیهان گفت:

    اگه وصل بشه گوگل کلوب خیلی عالیه

  2. m.a گفت:

    سلام چطور مسیر فایلی که می خوایم بخونیم را به ان بدهیم؟من تمام مراحلی که گفتید را انجام دادم ولی ارور زیر را دارم.
    import skimage.io as io
    img = io.imread(‘VSD.Brain.XX.O.MR_T2.3523.mha’, plugin=’simpleitk’)
    plt.plot(img[87,:,:])

    ارور من
    RuntimeError: Exception thrown in SimpleITK ReadImage: /tmp/SimpleITK/Code/IO/src/sitkImageReaderBase.cxx:99:
    sitk::ERROR: The file “VSD.Brain.XX.O.MR_T2.3523.mha” does not exist.

    فایلی که میخام بخونم در مسیر درایوم هست ولی این ارور را می دهد.

  3. Sh.Chamran گفت:

    سلام.وقتتون به خیر .خیلی ممنون به خاطر توضیحاتتون .
    من یک کد از github می خواهم در google colab اجرا کنم اما نمی دانم چگونه و به ترتیب باید چه کنم .لطفا در این زمینه راهنماییم می کنید.
    سوال دیگری هم دارم اینکه دیتا های من به صورت .tfrecord در امده اند و نمی دانم چگونه این کار را colab روی دیتاها انجام دهم تا برنامه به درستی اجرا شود
    ممنون

  4. Sh.Chamran گفت:

    سلام.وقتتون به خیر .خیلی ممنون به خاطر توضیحاتتون .
    من یک کد از github می خواهم در google colab اجرا کنم اما نمی دانم چگونه و به ترتیب باید چه کنم .لطفا در این زمینه راهنماییم می کنید.
    سوال دیگری هم دارم اینکه دیتا های من به صورت .tfrecord در امده اند و نمی دانم چگونه این کار را colab انجام دهم تا برنامه به درستی اجرا شود.
    https://github.com/yanbeic/semi-memory/blob/master/convert_tfrecords.py
    ممنون

  5. بهزاد گفت:

    درود بر شما

    سپاس فراوان بابت زحمات و زمانی برای خواندن و جواب دادن میگذارید !

    من مقاله پایه پایان نامه ام در زمینه deeplearning شبکه U_net میباشد اموزش های در این زمینه از سایت فرادرس گرفتم (پیاده سازی ) بخوبی یاد گرفتم !
    مشکل من اینجاست سیستم من Cudnn را ساپورت نمیکنه ! و ان اموزش ها در محیط اسپایدر= اناکوندا بوده
    و دارم از گوگل کولب استفاده میکنم برای پیاده سازی ، دیتا های خودم بر روی Google Drive اپلود کردم ( پوشه ای در گوگل درایو درست شده ( دیتا بیس اپلود شده ) ) اما به یک مشکل برخوردم نمیدونم چطوری ادرس بدم میشه خواهش کنم راهنمایی کنید !
    من به منابع دیگر هم مراجعه کردم اما گیج شدم (سر در گم شدم)
    لطفا کمک (راهنمایی کنید )

    سپاس گذارم

  6. محمد گفت:

    سلام. درقسمت Train با خطای
    RuntimeError: CUDA error: device-side assert triggered

    مواجه میشم

  7. amin گفت:

    منون دکتر بابت آموزشا .ای کاش این گوگل کلب رو یه بار دیگه بنویسید واقعا ما سیستم قوی نداریم و رشته مونم کامپیوتر نیست و این کولب یه چیزاییش انگار عوض شده مثلا من خودم هنوز نتونستم پوشه VALIDATION درست کنم .تشکر

  8. حسین گفت:

    ضمن عرض سلام و وقت بخیر
    مطالب مختصر و مفیدی رو ارائه دادید.. ممنون
    من یه مشکلی که بهش برخوردم، اینه که میخام چند تا دیتایی که از اینترنت (با استفاده از دستور wget) دانلود کردم رو ابتدا با هم ادغام (merge) کنم (فرض کنید که چند تا عکس ماشین هستن که من میخام بریزم تو یه دیتا فایل) بعدش منتقل کنم به google drive تا پاک نشه. منتهی نمیدونم از چه کد و دستورهایی باید استفاده کنم.
    ممنون میشم راهنماییم کنید

  9. gm گفت:

    سلام جناب دکتررضوی
    بسیار متشکرم از فایلهای ارزشمندتون
    امکانش هست رکورد برگزاری دوره ها هم در اختیار داشته باشیم
    در یوتیوپ یا آپارات؟

    خیلی متشکرم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شانزده − 2 =