یادگیری عمیق در گوگل کولب

مقاله LIFT: Learned Invariant Feature Transform
سپتامبر 27, 2022
شبکه عمیق dfm
نوامبر 4, 2022

یادگیری عمیق در گوگل کولب

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

Google Colab یک پلت فرم عالی برای علاقه مندان به یادگیری عمیق است و همچنین می تواند برای آزمایش مدل های اصلی یادگیری ماشین، کسب تجربه، و ایجاد شهود در مورد جنبه های یادگیری عمیق مانند تنظیم هایپرپارامتر، پیش پردازش داده ها، پیچیدگی مدل، اضافه کردن و غیره استفاده شود.

بیایید کاوش کنیم!

مقدمه
Colaboratory by Google (به طور خلاصه Google Colab) یک محیط اجرا مبتنی بر نوت بوک Jupyter است که به شما امکان می دهد کد را به طور کامل روی ابر اجرا کنید.

آموزش کار با گوگل کولب ضروری است زیرا به این معنی است که می توانید مدل های ML و DL در مقیاس بزرگ را آموزش دهید حتی اگر به یک دستگاه قدرتمند یا به اینترنت پرسرعت دسترسی ندارید.

Google Colab از هر دو نمونه GPU و TPU پشتیبانی می کند، که به دلیل محدودیت های محاسباتی در ماشین های محلی، آن را به ابزاری عالی برای علاقه مندان به یادگیری عمیق و تجزیه و تحلیل داده ها تبدیل می کند.

از آنجایی که می توان به یک نوت بوک Colab از راه دور از هر ماشینی از طریق مرورگر دسترسی داشت، برای مقاصد تجاری نیز مناسب است.

در این آموزش یاد خواهید گرفت:

گردش در Google Colab
نصب کتابخانه های پایتون در Colab
دانلود مجموعه داده های بزرگ در Colab
آموزش مدل یادگیری عمیق در کولب
استفاده از TensorBoard در Colab

ایجاد اولین نوت بوک .ipynb خود در colab
مرورگر مورد نظر خود را باز کنید و به colab.research.google.com بروید و با استفاده از حساب Google خود وارد شوید. روی یک نوت بوک جدید کلیک کنید تا یک نمونه زمان اجرا جدید ایجاد شود.

در گوشه بالا سمت چپ، می توانید با کلیک بر روی آن، نام نوت بوک را از “Untitled.ipynb” به نام دلخواه خود تغییر دهید.

بلوک اجرای سلول جایی است که کد خود را تایپ می کنید. برای اجرای سلول، shift + enter را فشار دهید.

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

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

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

#import necessary libraries
import tensorflow as tf

#load training data and split into train and test sets
mnist = tf.keras.datasets.mnist
 
(x_train,y_train), (x_test,y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

خروجی این قطعه کد به شکل زیر خواهد بود:

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step

در مرحله بعد، مدل Google Colab را با استفاده از Python تعریف می کنیم:

#define model
model = tf.keras.models.Sequential([
                               tf.keras.layers.Flatten(input_shape=(28,28)),
                                   tf.keras.layers.Dense(128,activation='relu'),
                                   tf.keras.layers.Dropout(0.2),
                                   tf.keras.layers.Dense(10)
])

#define loss function variable
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

#define optimizer,loss function and evaluation metric
model.compile(optimizer='adam',
             loss=loss_fn,
             metrics=['accuracy'])

#train the model
model.fit(x_train,y_train,epochs=5)

خروجی مورد انتظار پس از اجرای قطعه کد بالا عبارت است از:

Epoch 1/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3006 - accuracy: 0.9125
Epoch 2/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1461 - accuracy: 0.9570
Epoch 3/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1098 - accuracy: 0.9673
Epoch 4/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0887 - accuracy: 0.9729
Epoch 5/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0763 - accuracy: 0.9754
<tensorflow.python.keras.callbacks.History at 0x7f2abd968fd0>

خروجی مورد نظر :

313/313 - 1s - loss: 0.0785 - accuracy: 0.9764 - 620ms/epoch - 2ms/step
[0.07853343337774277, 0.9764000177383423]
#extend the base model to predict softmax output
probability_model = tf.keras.Sequential([
                                        model,
                                        tf.keras.layers.Softmax()])

نصب بسته ها در Google Colab
شما می توانید از سلول کد در Colab نه تنها برای اجرای کد پایتون بلکه برای اجرای دستورات پوسته استفاده کنید. فقط یک ! را قبل از یک فرمان اضافه کنید. علامت تعجب به سلول نوت بوک می گوید که دستور زیر را به عنوان دستور پوسته اجرا کند.

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

مدیر بسته مورد استفاده برای نصب بسته ها pip است.

برای نصب یک نسخه خاص از TensorFlow از این دستور استفاده کنید:

!pip3 install tensorflow==1.5.0

خروجی زیر پس از اجرای دستور بالا انتظار می رود:

خروجی نصب تنسورفلو
برای استفاده از نسخه جدید نصب شده روی RESTART RUNTIME کلیک کنید.

نسخه tf
همانطور که در بالا می بینید، نسخه Tensorflow را از «2.3.0» به «1.5.0» تغییر دادیم.

دقت تست برای مدلی که در بالا آموزش دادیم حدود 97 درصد است. اصلا بد نیست، اما این کار آسانی بود.

مدل‌های آموزشی معمولاً چندان آسان نیست و ما اغلب مجبوریم مجموعه داده‌ها را از منابع شخص ثالث مانند Kaggle بارگیری کنیم.

بنابراین بیایید ببینیم که چگونه مجموعه داده‌ها را دانلود کنیم، وقتی پیوند مستقیمی برای خود نداریم.

دانلود مجموعه داده
هنگامی که در حال آموزش یک مدل یادگیری ماشین در ماشین محلی خود هستید، احتمالاً با هزینه های ذخیره سازی و پهنای باند ناشی از دانلود و ذخیره مجموعه داده مورد نیاز برای آموزش یک مدل مشکل خواهید داشت.

مجموعه داده‌های یادگیری عمیق می‌توانند حجم زیادی داشته باشند و بین 20 تا 50 گیگابایت متغیر باشند. اگر در یک کشور در حال توسعه زندگی می کنید، که در آن دسترسی به اینترنت پرسرعت امکان پذیر نیست، دانلود آنها بسیار چالش برانگیز است.

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

خوشبختانه، Colab راه‌های مختلفی را برای دانلود مجموعه داده از پلت‌فرم‌های میزبانی داده رایج در اختیار ما قرار می‌دهد.

دانلود مجموعه داده از Kaggle
برای دانلود یک مجموعه داده موجود از Kaggle، می‌توانیم مراحل زیر را دنبال کنیم:

به حساب Kaggle خود بروید و روی “Create New API Token” کلیک کنید. با این کار یک فایل kaggle.json در دستگاه شما دانلود می شود.
به فایل پروژه Google Colab خود بروید و دستورات زیر را اجرا کنید:

! pip install -q kaggle
from google.colab import files

# choose the kaggle.json file that you downloaded
files.upload()
! mkdir ~/.kaggle

# make a directory named kaggle and copy the kaggle.json file there
cp kaggle.json ~/.kaggle/

# change the permissions of the file
! chmod 600 ~/.kaggle/kaggle.json

# download the dataset for a specific competition
! kaggle competitions download -c 'name-of-competition'

دانلود مجموعه داده از هر وب سایت عمومی
بسته به مرورگری که استفاده می‌کنید، افزونه‌هایی برای تبدیل پیوند دانلود مجموعه داده به فرمت «curl» یا «wget» وجود دارد. شما می توانید از این برای دانلود موثر مجموعه داده استفاده کنید.

برای فایرفاکس، پسوند مرورگر cliget وجود دارد: cliget – این افزونه را برای 🦊 Firefox (en-US) دریافت کنید
برای کروم، افزونه CurlWget وجود دارد: Ad Added CurlWget 52
این افزونه به محض کلیک بر روی دکمه دانلود در مرورگر خود، دستور curl/wget تولید می‌کنند.

سپس می توانید آن دستور را کپی کرده و در دفترچه Colab خود اجرا کنید تا مجموعه داده را دانلود کنید.

توجه: به طور پیش فرض، نوت بوک Colab از پوسته Python استفاده می کند. برای اجرای دستورات ترمینال در Colab، باید از در ابتدای فرمان “!” استفاده کنید.

به عنوان مثال، برای دانلود یک فایل از some.url و ذخیره آن به عنوان some.file، می توانید از دستور زیر در Colab استفاده کنید:

!curl http://some.url --output some.file


توجه: دستور curl مجموعه داده را در فضای کاری Colab بارگیری می کند، که هر بار که زمان اجرا قطع می شود، از بین می رود. بنابراین یک روش ایمن این است که مجموعه داده را به محض دانلود کامل مجموعه داده به درایو ابری خود منتقل کنید.

دانلود مجموعه داده از GCP یا Google Drive
Google Cloud Platform یک بستر محاسبات ابری و ذخیره سازی است. می توانید از آن برای ذخیره مجموعه داده های بزرگ استفاده کنید و می توانید آن مجموعه داده را مستقیماً از ابر به Colab وارد کنید.

برای آپلود و دانلود فایل‌ها در GCP، ابتدا باید حساب Google خود را احراز هویت کنید.

from google.colab import auth
auth.authenticate_user()

از شما می‌خواهد با استفاده از حساب Google خود از یک پیوند دیدن کنید و یک کلید احراز هویت به شما بدهد. برای تأیید حساب خود، آن کلید را در فضای ارائه شده جای‌گذاری کنید.

پس از آن، gsutil را برای آپلود و دانلود فایل ها نصب کنید و سپس gcloud را راه اندازی کنید.

!curl https://sdk.cloud.google.com | bash
!gcloud init

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

هنگامی که این گزینه ها را پیکربندی کردید، می توانید از دستورات زیر برای دانلود/آپلود فایل ها به و از Google Cloud Storage استفاده کنید.

برای دانلود یک فایل از Cloud Storage در Google Colab از:

!gsutil cp gs://maskaravivek-data/data_file.csv 

برای آپلود فایل‌ها از Google Colab در Cloud، از:

gsutil cp test.csv gs://maskaravivek-data/


شروع یک اجرا با فعال بودن GPU/TPU
یادگیری عمیق یک فرآیند محاسباتی پرهزینه است، برای آموزش یک مدل باید محاسبات زیادی را همزمان انجام داد. برای کاهش این مشکل، Google Colab نه تنها زمان اجرا کلاسیک CPU، بلکه گزینه ای برای زمان اجرا GPU و TPU نیز به ما ارائه می دهد.

اجرا CPU برای آموزش مدل های بزرگ بهترین است زیرا حافظه بالایی دارد.

اجرای GPU برای محاسبات نامنظم، مانند دسته های کوچک و محاسبات غیرMatMul، انعطاف پذیری و برنامه ریزی بهتری را نشان می دهد.

اجرا TPU برای دسته های بزرگ و CNN ها بسیار بهینه شده است و بالاترین توان آموزشی را دارد.

اگر مدل کوچکتری برای آموزش دارید، پیشنهاد می‌کنم این مدل را در زمان اجرا GPU/TPU آموزش دهید تا از Colab تا حد امکان استفاده کنید.

برای ایجاد یک اجرا با قابلیت GPU/TPU، می‌توانید روی اجرا در منوی نوار ابزار زیر نام فایل کلیک کنید. از آنجا، روی «Change runtime type» کلیک کنید و سپس GPU یا TPU را در منوی کشویی Hardware Accelerator انتخاب کنید

توجه داشته باشید که نسخه رایگان Google Colab در دسترس بودن پایدار زمان اجرا با قابلیت GPU/TPU را تضمین نمی کند. در صورت استفاده طولانی مدت، ممکن است جلسه شما خاتمه یابد!

می توانید Colab Pro را خریداری کنید (اگر در ایالات متحده یا کانادا هستید، در حال حاضر فقط در این کشورها موجود است). این 10 دلار در ماه است و نه تنها پردازنده‌های گرافیکی سریع‌تر، بلکه جلسات طولانی‌تری را نیز ارائه می‌کند.

آموزش مدل های پیچیده تر و بزرگتر
برای آموزش مدل های پیچیده، اغلب باید مجموعه داده های بزرگی را بارگیری کنید. توصیه می شود با استفاده از روش mount drive داده ها را مستقیماً از Google Drive بارگیری کنید.

با این کار تمام داده ها از Drive شما به نمونه زمان اجرا وارد می شود. برای شروع، ابتدا باید Google Drive خود را در جایی که مجموعه داده ذخیره می‌شود، نصب کنید.

همچنین می توانید از فضای ذخیره سازی پیش فرض موجود در Colab استفاده کنید و مجموعه داده را مستقیماً از GCS یا Kaggle در Colab دانلود کنید.

نصب درایو
Google Colab به شما امکان می دهد داده ها را از حساب Google Drive خود وارد کنید تا بتوانید به داده های آموزشی از Google Drive دسترسی داشته باشید و از مجموعه داده های بزرگ برای آموزش استفاده کنید.

2 راه برای نصب درایو در Colab وجود دارد:

با استفاده از رابط کاربری گرافیکی
استفاده از قطعه کد

روی نماد Files در سمت چپ صفحه کلیک کنید و سپس روی نماد “Mount Drive” کلیک کنید تا Google Drive خود را سوار کنید.

  1. استفاده از قطعه کد

این بلوک کد را برای نصب Google Drive خود در Colab اجرا کنید:

from google.colab import drive
drive.mount('/content/drive')

روی لینک کلیک کنید، کد را کپی کنید و در کادر ارائه شده قرار دهید. برای نصب درایو، اینتر را فشار دهید.

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

آموزش مدل با کراس
Keras یک API است که در پایتون نوشته شده است و در بالای Tensorflow اجرا می شود. برای نمونه سازی سریع مدل های آزمایشی و ارزیابی عملکرد استفاده می شود.

استقرار یک مدل در Keras در مقایسه با Tensorflow بسیار آسان است. در اینجا یک مثال است:

#import necessary libraries
import numpy as np
import cv2
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
import pandas as pd
#mount drive and load csv data
from google.colab import drive
drive.mount('/content/drive')

#navigate to the directory containing the training data
cd drive/My\ Drive/

#load data
data = pd.read_csv('train.csv')

#preprocess the data
train = data.iloc[0:40000,:] #train split
train_X = train.drop('label',axis=1)
train_Y = train.iloc[:,0]
 
val = data.iloc[40000:,:]    #val split
val_X = val.drop('label',axis=1)
val_Y = val.iloc[:,0]
 
train_X = train_X.to_numpy() #convert pd data to numpy arrays
train_Y = train_Y.to_numpy()
val_X = val_X.to_numpy()
 
val_Y = val_Y.to_numpy()
train_X = train_X/255.    #normalise pixel values
val_X = val_X/255.
 
train_X = np.reshape(train_X,(40000,28,28,1)) #reshape data to feed to network
val_X = np.reshape(val_X,(2000,28,28,1))

#define model
model = keras.Sequential([
   keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)),
   keras.layers.MaxPooling2D((2,2)),
   keras.layers.Conv2D(64,(3,3),activation='relu'),
   keras.layers.MaxPooling2D((2,2)),
   keras.layers.Conv2D(64,(3,3),activation='relu'),
   keras.layers.Flatten(),
   #keras.layers.Dense(128,activation='relu'),
   keras.layers.Dense(64,activation='relu'),
   #keras.layers.Dense(32,activation='relu'),
   keras.layers.Dense(10)
])
 
#state optimizer,loss and evaluation metric
model.compile(optimizer='adam',
            loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
            metrics=['accuracy'])
 
#train the model
model.fit(train_X,train_Y,epochs=10,validation_data=(val_X, val_Y))


پس از اجرای این سلول، خروجی مشابه این را خواهید دید:

Epoch 1/10
1250/1250 [==============================] - 37s 30ms/step - loss: 0.1817 - accuracy: 0.9433 - val_loss: 0.0627 - val_accuracy: 0.9770
Epoch 2/10
1250/1250 [==============================] - 36s 29ms/step - loss: 0.0537 - accuracy: 0.9838 - val_loss: 0.0471 - val_accuracy: 0.9850
Epoch 3/10
1250/1250 [==============================] - 36s 29ms/step - loss: 0.0384 - accuracy: 0.9883 - val_loss: 0.0390 - val_accuracy: 0.9875
...
1250/1250 [==============================] - 36s 29ms/step - loss: 0.0114 - accuracy: 0.9963 - val_loss: 0.0475 - val_accuracy: 0.9880
Epoch 10/10
1250/1250 [==============================] - 36s 29ms/step - loss: 0.0101 - accuracy: 0.9967 - val_loss: 0.0982 - val_accuracy: 0.9735

#validate accuracy
test_loss, test_acc = model.evaluate(val_X,val_Y,verbose=2)
Expected output:
63/63 - 1s - loss: 0.0982 - accuracy: 0.9735
 
 
#define prediction model
predict_model = tf.keras.Sequential([
   model,tf.keras.layers.Softmax()
])
 
#test on a validation image
test_image = val_X[140]
test_image = np.reshape(test_image,(1,28,28,1))
result = predict_model.predict(test_image)
print(np.argmax(result))
plt.imshow(val_X[140].reshape(28,28))
plt.show()

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

نمونه اجرای FastAI در Colab را می توانید در اینجا مشاهده کنید.

TensorBoard در Google Colab
TensorBoard ابزاری است که توسط Tensorflow برای تجسم داده های مرتبط با یادگیری ماشین ارائه شده است.

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

مانیتورینگ داده ها با استفاده از TensorBoard
برای استفاده از TensorBoard، باید چند کتابخانه لازم را وارد کنید. این قطعه کد را برای وارد کردن آن کتابخانه ها اجرا کنید:

# Load the TensorBoard notebook extension
%load_ext tensorboard
import datetime, os

قبل از اینکه شروع به تجسم داده ها کنیم، باید تغییراتی در model.fit():

logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)

model.fit(x=x_train,y=y_train,epochs=5,validation_data=(x_test, y_test),callbacks=[tensorboard_callback])

پس از آموزش، می‌توانید جعبه ابزار TensorBoard را راه‌اندازی کنید تا ببینید مدل چقدر خوب عمل می‌کند:

%tensorboard --logdir logs


ذخیره و بارگذاری مدل ها
مدل آموزشی زمان زیادی می برد، بنابراین عاقلانه است که بتوانیم مدل آموزش دیده را برای استفاده دوباره و دوباره ذخیره کنیم. هر بار آموزش آن بسیار خسته کننده و وقت گیر خواهد بود. Google Colab به شما امکان می دهد مدل ها را ذخیره کرده و آنها را بارگذاری کنید.

ذخیره و بارگذاری وزن یک مدل
هدف اصلی از آموزش یک مدل DL تنظیم وزن ها به گونه ای است که خروجی را به درستی پیش بینی کند. منطقی است که فقط وزن های مدل را ذخیره کنید و در صورت نیاز آنها را بارگیری کنید.

برای ذخیره وزن به صورت دستی، از موارد زیر استفاده کنید:

model.save_weights('./checkpoints/my_checkpoint')

برای بارگیری وزنه ها در یک مدل از موارد زیر استفاده کنید:

model.load_weights('./checkpoints/my_checkpoint'


ذخیره و بارگیری کل مدل
گاهی اوقات بهتر است کل مدل را ذخیره کنید تا از مشکل تعریف مدل و مراقبت از ابعاد ورودی و سایر پیچیدگی ها خلاص شوید. می توانید کل مدل را ذخیره کرده و آن را به ماشین های دیگر صادر کنید.

برای ذخیره کل مدل، از:

#make sure to make a saved_model directory if it doesn't exist
model.save('saved_model/my_model'

برای بارگذاری یک مدل ذخیره شده، از موارد زیر استفاده کنید:

new_model = tf.keras.models.load_model('saved_model/my_model')


نتیجه
اکنون می بینید که Google Colab یک ابزار عالی برای نمونه سازی و آزمایش مدل های یادگیری عمیق است.

Colab با GPU رایگان خود و توانایی وارد کردن داده از Google Drive به عنوان یک پلتفرم بسیار مؤثر برای آموزش مدل‌ها در ماشین‌های رده پایین با محدودیت‌های محاسباتی و ذخیره‌سازی متمایز است.

همچنین نوت بوک را در Google Drive شما مدیریت می کند و یک سیستم مدیریت داده پایدار و سازمان یافته را برای برنامه نویسانی که می خواهند روی یک پروژه با هم کار کنند ارائه می دهد.

با تشکر برای خواندن!

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

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