مقدمه

Keras یک کتابخانه رایگان منبع باز قدرتمند و با کاربرد آسان برای توسعه و ارزیابی مدل های یادگیری عمیق است.keras دو کتابخانه یادگیری ماشین عددی Theano و TensorFlow را پوشش می دهد و به شما امکان می دهد فقط در چند خط کد، مدل های شبکه عصبی را تعریف و آموزش دهید.

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

در ابتدا به توضیحات کلی می پردازیم و سپس به سراغ آموزش کتابخانه کراس پایتون خواهیم رفت.

یادگیری عمیق چیست ؟

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

کتابخانه های پایتون

بیش از ده کتابخانه یادگیری عمیق در پایتون وجود دارد ، اما در این مقاله به معرفی ۵ تا از معروف ترین و محبوب ترین کتابخانه های یادگیری عمیق Python می پردازیم.

آیا لازم است هر ۵ کتابخانه زیر را یاد بگیریم؟

خیر. در واقع ، شما فقط نیاز به یادگیری ۱ یا ۲ کتابخانه دارید تا بتوانید آنچه می خواهید را انجام دهید.

در زیر خلاصه ای از کتابخانه های پایتون آورده شده است:

 Theano

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

 TensorFlow

TensorFlow چیست : کتابخانه سطح پایین دیگری است که از تکامل کمتری نسبت به Theano برخوردار است. با این حال ، توسط Google پشتیبانی می شود و محاسبات توزیع شده به اصطلاح خارج از جعبه را ارائه می دهد. تیم هوش مصنوعی گوگل TensorFlow را توسعه داد و اخیراً آن را به صورت متن باز ساخته اند.

TensorFlow محاسبه عددی کارآمد را با استفاده از نمودارهای جریان داده امکان پذیر می کند. این کتابخانه هوش مصنوعی به عنوان Theano 2.0 از ابتدا به بازار عرضه شده است.

یک مزیت TensorFlow این است که از رایانه های توزیع شده خارج از جعبه پشتیبانی می کند. این امر آموزش شبکه های عمیق در چندین GPU را بسیار آسان می کند.

 Lasagne

یک بسته بندی سبک وزن برای Theano است. در صورت نیاز به انعطاف پذیری  Theano از این مورد استفاده کنید البته نیازی نیست همیشه لایه های شبکه عصبی را از ابتدا بنویسید.

Keras

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

 MXNet

یکی دیگر از کتابخانه های سطح بالا و مشابه Keras است. این کتابخانه اتصال برای چندین زبان و پشتیبانی از محاسبات توزیع شده را ارائه می دهد.

مراحل کار با کتابخانه کراس

keras

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

۱) محیط خود را تنظیم کنید.

۲) کتابخانه کراس را نصب کنید.

۳) کتابخانه ها و ماژول ها را وارد کنید.

۴) اطلاعات و داده ها را آپلود کنید.

۵) مدل Keras را تعریف کنید.

۶) مدل Keras را کامپایل کنید.

۷) مدل Keras را به سازگاری برسانید و fit کنید.

۸) مدل Keras را ارزیابی کنید.

۹) همه را با هم ادغام کنید و یکپارچه سازی انجام دهید.

۱۰) پیش بینی انجام دهید.

برای آموزش Keras باید چند مورد زیر را انجام داده باشید:

۱- باید Python 2 یا Python 3 را نصب و پیکربندی کرده باشید.

۲- باید کتابخانه SciPy از جمله NumPy را نصب و پیکربندی کرده باشید.

۳- باید Keras و بک اندی مانند Theano یا TensorFlow را نصب و پیکربندی کرده باشید.

۱) نحوه تنظیم محیط پایتون برای یادگیری عمیق

۱- Anaconda را نصب کنید.

در این مرحله ، نرم افزار Anaconda Python را روی سیستم نصب کنید.

اگر از امتیازات اداری کافی برای نصب نرم افزار بر روی سیستم خود برخوردار هستید، روی فایل دانلود شده دوبار کلیک کنید و مراحل نصب را طی کنید.

 

۲) Keras را نصب کنید.

اگر از Anaconda استفاده کرده اید ، در حال حاضر یک سیستم مدیریت بسته خوب به نام  pip نصب شده دارید. با تایپ $ pip در خط فرمان می توانید مطمِئن شوید که نصب آن را انجام داده اید. باید لیستی از دستورات و گزینه ها را تولید کند.

پس از تهیه پیپ ، نصب Keras آسان است:

$ pip install keras

می توانید نصب آن را به درستی تأیید کنید:


$ python -c "import keras; print keras.__version__"
Using Theano backend.
۱٫۰٫۴

اگر نسخه Keras قدیمی بود، به شکل زیر به روزرسانی کنید:

$ pip install --upgrade keras

...



$ python -c "import keras; print keras.__version__"

Using Theano backend.

۱٫۱٫۱

 

۳) وارد کردن کتابخانه ها و ماژول ها

کتابخانه کراس

یک فایل جدید به نام keras_first_network.py ایجاد کنید و کد زیر را وارد کنید.


# scipy
import scipy
print('scipy: %s' % scipy.__version__)
# numpy
import numpy
print('numpy: %s' % numpy.__version__)
# matplotlib
import matplotlib
print('matplotlib: %s' % matplotlib.__version__)
# pandas
import pandas
print('pandas: %s' % pandas.__version__)
# statsmodels
import statsmodels
print('statsmodels: %s' % statsmodels.__version__)
# scikit-learn
import sklearn
print('sklearn: %s' % sklearn.__version__)

 

۴)  آپلود داده ها

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

ما برای بارگذاری مجموعه داده خود از کتابخانه NumPy و برای تعریف مدل خود از دو کلاس از کتابخانه Keras استفاده خواهیم کرد.

موارد مورد نیاز برای آپلود در زیر ذکر شده است.


# first neural network with keras tutorial
from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense


اکنون می توانیم مجموعه داده های خود را تنظیم کنیم.

در این آموزش Keras ، ما قصد داریم از مجموعه داده های Pima Indians که داده های بیماران مبتلا به دیابت هستند، استفاده کنیم. Pima Indians یک مجموعه داده استاندارد یادگیری ماشین از مخزن یادگیری ماشین UCI است. این داده ها، سوابق پزشکی بیماران سرخپوستان پیما را توصیف می کنند و اینکه آیا آنها در طی پنج سال شروع دیابت داشته اند یا خیر.

این داده ها دارای طبقه بندی باینری هستند (در صورت وجود دیابت ۱ و در غیر آن صورت ۰). تمام متغیرهای ورودی که هر بیمار را توصیف می کنند ، باینری هستند. این امر استفاده از آن را برای استفاده از شبکه های عصبی که انتظار مقادیر ورودی و خروجی عددی را دارند و برای اولین شبکه عصبی ما در کراس، ایده آل است.

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

فایل  Dataset CSV (pima-indians-diabet.csv)

جزئیات مجموعه داده

مجموعه داده را دانلود کرده و در فهرست محلی کار خود یعنی همان مکان فایل پایتون ، قرار دهید.

آن را با نام پرونده ذخیره کنید:

pima-indians-diabetes.csv

به داخل پرونده نگاهی بیندازید ، باید ردیف هایی از داده مانند موارد زیر را ببینید:

۶,۱۴۸,۷۲,۳۵,۰,۳۳٫۶,۰٫۶۲۷,۵۰,۱

۱,۸۵,۶۶,۲۹,۰,۲۶٫۶,۰٫۳۵۱,۳۱,۰

۸,۱۸۳,۶۴,۰,۰,۲۳٫۳,۰٫۶۷۲,۳۲,۱

۱,۸۹,۶۶,۲۳,۹۴,۲۸٫۱,۰٫۱۶۷,۲۱,۰

۰,۱۳۷,۴۰,۳۵,۱۶۸,۴۳٫۱,۲٫۲۸۸,۳۳,۱

اکنون می توانیم پرونده را با استفاده از تابع NumPy loadtxt () به صورت ماتریس اعداد دانلود کنیم.

هشت متغیر ورودی و یک متغیر خروجی وجود دارد (ستون آخر). اکنون در حال یادگیری مدلی برای ترسیم ردیف متغیرهای ورودی (X) به یک متغیر خروجی (y) خواهیم بود ، که اغلب آنها را به صورت y = f (X) خلاصه می کنیم.

متغیرها را می توان به صورت زیر خلاصه کرد:

متغیرهای ورودی (X):

۱-تعداد دفعات بارداری

۲-غلظت قند خون در ۲ ساعت، در یک تست تحمل قند خوراکی

۳-فشار خون دیاستولیک (میلی متر جیوه)

۴-ضخامت چین خوردگی پوست عضلات سه سر (میلی متر)

۵-انسولین سرمی ۲ ساعته (mu U / ml)

۶-شاخص توده بدن (وزن در کیلوگرم / (قد در متر) ^ ۲)

۷-عملکرد شجره نامه دیابت

۸-سن (سال)

متغیرهای خروجی (y): متغیر کلاس (۰ یا ۱)

پس از آپلود فایل CSV در حافظه ، می توانیم ستون های داده را به متغیرهای ورودی و خروجی تقسیم کنیم.

داده ها در یک آرایه دو بعدی ذخیره می شوند که در آن بعد اول، ردیف ها و بعد دوم، ستون ها هستند. به عنوان مثال: [ردیف ، ستون].

ما می توانیم با انتخاب زیر مجموعه ستون ها با استفاده از عملگر برش استاندارد NumPy یا “:” آرایه را به دو آرایه تقسیم کنیم. از طریق برش ۰: ۸ می توانیم ۸ ستون اول را از فهرست ۰ به اندیس ۷ انتخاب کنیم. سپس می توانیم ستون خروجی را از طریق اندیس ۸ انتخاب کنیم.

...
# load the dataset
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=',')
# split into input (X) and output (y) variables
X = dataset[:,0:8]
y = dataset[:,8]
...

اکنون آماده ایم مدل شبکه عصبی خود را تعریف کنیم.

توجه داشته باشید ، مجموعه داده دارای ۹ ستون است و دامنه ۰: ۸ ستونها را از ۰ تا ۷ انتخاب می کند ، قبل از اندیس ۸ متوقف می شود.

۵) مدل Keras را تعریف کنید.

مدل ها در کراس به عنوان دنباله ای از لایه ها تعریف می شوند.

ما یک مدل Sequential ایجاد می کنیم و لایه ها را یکی یکی اضافه می کنیم تا اینکه از معماری شبکه خود راضی شویم.

اولین چیزی که باید درست شود اطمینان از این است که لایه ورودی از تعداد ورودی های مناسب برخوردار است. این را می توان هنگام ایجاد اولین لایه با آرگومان input_dim و تنظیم آن روی ۸ برای ۸ متغیر ورودی ، تعیین کرد.

چگونه تعداد لایه ها و انواع آنها را بدانیم؟

این سوال بسیار سختی است. روش های ابتکاری وجود دارد که می توانیم از آنها استفاده کنیم و غالباً بهترین ساختار شبکه از طریق یک آزمایش و خطا یافت می شود. به طور کلی ، به یک شبکه به اندازه کافی بزرگ نیاز دارید تا ساختار را درک کنید.

در این مثال ، ما از یک ساختار شبکه کاملاً متصل با سه لایه استفاده خواهیم کرد.

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

ما از تابع فعال سازی واحد خطی اصلاح شده در دو لایه اول و تابع Sigmoid در لایه خروجی استفاده می کنیم.

قبلاً اینگونه بود که توابع فعال سازی Sigmoid و Tanh برای همه لایه ها ترجیح داده می شدند. اما این روزها با استفاده از تابع فعال سازی ReLU عملکرد بهتری حاصل می شود. ما برای اطمینان از اینکه خروجی شبکه ما بین ۰ تا ۱ است ، از یک سیگموئید استفاده می کنیم و نقشه برداری به راحتی از کلاس ۱ یا به یک طبقه بندی سخت از هر دو کلاس با آستانه پیش فرض ۰٫۵ انجام می شود.

با افزودن هر لایه می توانیم همه آن ها را با هم قرار دهیم:

...
# define the keras model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
...

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

۶) مدل Keras را کامپایل کنید.

اکنون که مدل تعریف شد ، می توانیم آن را کامپایل کنیم.

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

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

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

در این حالت ، ما از آنتروپی متقاطع یا cross entropy به عنوان آرگومان زیان استفاده خواهیم کرد. این زیان برای مشکلات طبقه بندی باینری است و در Keras به عنوان “باینری_ کراسنروپی” تعریف شده است.

در اینجا بهینه ساز را به عنوان «الگوریتم گرادیان کاهشی تصادفی» یا (Stochastic Gradient Descent Algorithm) “آدام ” تعریف خواهیم کرد. این یک نسخه محبوب از شیب نزولی است زیرا به طور خودکار خود را تنظیم می کند و در طیف گسترده ای از مشکلات نتایج خوبی نشان می دهد.

...
# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
...

۷) سازگاری با مدل Keras

ما مدل خود را تعریف کرده و آن را برای محاسبه کارآمد آماده کرده ایم. اکنون زمان اجرای مدل بر روی برخی از داده ها فرا رسیده است.

می توانیم با فراخوانی تابع fit () مدل ، مدل خود را بر روی داده های بارگذاری شده خود متناسب کنیم.

آموزش در دوره های مختلف رخ می دهد و هر دوره به چند دسته تقسیم می شود.

Epoch یا دوره:  یک عبور از مجموعه ردیف ها در داده های آموزشی.

Batch یا دسته: یک یا چند نمونه قبل از به روزرسانی وزن ، توسط مدل در یک دوره در نظر گرفته شده است.

یک دوره از یک یا چند دسته تشکیل شده است و بر اساس اندازه دسته انتخاب شده و مدل مناسب بسیاری از دوره ها است.

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

برای حل این مشکل ، برای تعداد (۱۵۰) دوره اجرا صورت خواهد گرفت و از اندازه دسته ای نسبتاً کوچک (۱۰) استفاده خواهیم کرد. این تنظیمات را می توان با استفاده از آزمون و خطا به صورت آزمایشی انتخاب کرد.

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

...
# fit the keras model on the dataset
model.fit(X, y, epochs=150, batch_size=10)
...

این همان جایی است که کار روی CPU یا GPU شما انجام می شود.

۸) مدل Keras را ارزیابی کنید.

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

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

می توانید با استفاده از تابع evaluate()مدل خود را بر روی مجموعه داده های آموزشی خود ارزیابی کرده و از همان ورودی و خروجی استفاده شده برای آموزش مدل استفاده کنید.

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

عملکرد evaluate() لیستی را با دو مقدار برمی گرداند. مورد اول، از بین رفتن مدل روی مجموعه داده و مورد دوم، دقت مدل روی مجموعه داده خواهد بود. ما فقط علاقه مند به گزارش درستی هستیم ، بنابراین مقدار زیان را نادیده می گیریم.

...
# evaluate the keras model
_, accuracy = model.evaluate(X, y)
print('Accuracy: %.2f' % (accuracy*100))

۹) همه را با هم ادغام کنید.

مشاهده کردید که چگونه می توانید به راحتی اولین مدل شبکه عصبی خود را در کراس ایجاد کنید.

اکنون همه را با هم در یک مثال کد کامل ادغام کنیم.

# first neural network with keras tutorial
from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense
# load the dataset
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=',')
# split into input (X) and output (y) variables
X = dataset[:,0:8]
y = dataset[:,8]
# define the keras model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit the keras model on the dataset
model.fit(X, y, epochs=150, batch_size=10)
# evaluate the keras model
_, accuracy = model.evaluate(X, y)
print('Accuracy: %.2f' % (accuracy*100))

می توانید همه کد ها را در فایل Python خود کپی کرده و به عنوان “keras_first_network.py” در دایرکتوری فایل داده “pima-indians-diabet.csv” ذخیره کنید. سپس می توانید فایل پایتون را به صورت اسکریپت از خط فرمان خود به شرح زیر اجرا کنید:

python keras_first_network.py