آشنایی با یادگیری عمیق در پایتون
یادگیری عمیق در پایتون
پایتون یک زبان چندمنظوره (General-purpose) است که در موارد مختلفی کاربرد دارد. یکی از اصلیترین کاربردهای پایتون برای علمداده (Data Science) و تولید الگوریتمهای یادگیری عمیق (Deep Learning) است. علم داده در دنیای امروز دهها کاربرد مختلف و مهم، از بازاریابی تا داروسازی و موتورهای جستجو دارد. در پایتون کتابخانههای بسیار خوبی برای یادگیری عمیق وجود دارند و این زبان، یکی از اصلیترین ابزارهای علم داده بهحساب میآید. در این مقاله قصد داریم مبانی یادگیری عمیق در پایتون را به زبانی بسیار ساده به شما آموزش دهیم. آشنایی با زبان پایتون و مفاهیم و تکنیکهای اساسی یادگیری عمیق برای بهره بردن از این مقاله مورد نیاز است.
مقاله پییشنهادی : آموزش یادگیری ماشین لرنینگ با پایتون
یادگیری عمیق چیست؟
بدون اینکه حتی بدانیم، بخشهای زیادی از زندگی روزمره ما توسط هوش مصنوعی و علم داده اداره میشود. یکی از مهمترین مباحث در هوش مصنوعی، یادگیری عمیق است. برای تعریف کردن مفهوم یادگیری عمیق ابتدا باید یادگیری ماشین را تعریف کنیم.
یادگیری ماشین به استفاده از آمار برای پیدا کردن الگوهای تکرار شونده در مقادیر بسیار بزرگ داده (Big Data) دارد. این دادهها ممکن است اعداد، کلمات، عکسها، کلیکها و هرگونه پدیده دیجیتالی دیگری باشند. سیستمهای بزرگ و معروف امروزی مثل یوتیوب و گوگل، عظمت خود را از پیادهسازی یادگیری ماشین بهدستآوردهاند.
یادگیری عمیق یکی از زیرمجموعههای یادگیری ماشین است که با افزایش عمق یادگیری ماشین، عملکردی شبیه به سلولهای مغز ایجاد میکند. از این طریق پدیدهای به نام «شبکه عصبی مصنوعی» ایجاد میشود که مثل مغز انسان شروع به یادگیری میکند.
یادگیری عمیق یکی از مهمترین دلایل تحول عظیم گوگل در سال ۲۰۱۵ بود. از کاربردهای دیگر پیادهسازی یادگیری عمیق میتوان به تشخیص خودکار غلطهای نگارشی در دیکشنریهای آنلاین اشاره کرد.
یادگیری عمیق چه کاربردهایی دارد؟
بهاحتمال زیاد تابهحال در مورد یادگیری عمیق و کاربردهای آن شنیدهاید. مهمترین کاربردهای یادگیری عمیق عبارتند از:
- تشخیص خودکار صحبت
- تشخیص عکس
- کار روی زبان طبیعی
- کشف دارو و سمشناسی
- ارتباطات مشتریان
- سیستم پیشنهاددهی
- بیوانفورماتیک
- تشخیص حرکت
کار با یادگیری عمیق در پایتون چگونه است؟
یادگیری عمیق از طریق کتابخانههای خاصی در پایتون اجرا میشود. برای کار با یادگیری عمیق در پایتون قبل از همه چیز لازم است Python 2.7 به بالا روی سیستم شما نصب باشد. علاوه بر این، لازم است کتابخانههای زیر روی پایتون شما نصب شده باشد.
- Scipy با Numpy
- Matplotlib
- Theano
- Keras
- TensorFlow
برای دسترسی به تمام این کتابخانهها (پکیجها) بهتر است از توزیع آناکوندا استفاده کنید. این توزیع شامل تعداد زیادی از کتابخانههای پایتون است که در بخشهای مختلف علم داده به کار میآیند. راه دیگر هم این است که پکیجهای گفته شده را یکییکی روی پایتون خود نصب و سپس import کنید.
مقاله پییشنهادی : همه چیز در مورد یادگیری عمیق یا Deep learning
استفاده از کتابخانه Keras
یکی از سادهترین راههای دسترسی به یادگیری عمیق در پایتون، کار با داده در Keras است. Keras یک کتابخانه متنباز برای توسعه مدلهای یادگیری عمیق است که استفاده بسیار سادهای دارد. با استفاده از این کتابخانه میتوانید شبکه عصبی مصنوعی مخصوصبهخود را تنها با چند خط کد ساخته و برای یادگیری تمرین دهید.
معمولا از Kernas در کنار کتابخانههای دیگری مثل numpy استفاده میشود. دلیل این امر این است که همیشه یادگیری عمیق نیاز به کار با داده دارد. برای import کردن کتابخانههای مورد نظر مینویسیم:
# first neural network with keras tutorial
from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense
...
در این مثال قصد داریم یک دیتاست شامل علائم ثبت شده از افراد و اینکه کدامیک از آنان دیابت داشتهاند را بارگذاری کرده و از طریق یادگیری عمیق، یک شبکه عصبی مصنوعی را برای تشخیص بیماری تعلیم دهیم.
این دیتاست را میتوانید از لینک (https: // raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv) دانلود کنید.
فایل را با نام pima-indians-diabtes.csv ذخیره کنید. در این دیتاست هر داده به صورت یکسری عدد وجود دارد:
۰,۱۳۷,۴۰,۳۵,۱۶۸,۴۳٫۱,۲٫۲۸۸,۳۳,۱
هشت مقدار اول مربوط به ویژگیهای بیمار بوده و مقدار آخر ۰ یا یک است (اگر فرد دیابت داشته باشد یک و در غیر این صورت صفر). برای طراحی مدل یادگیری عمیق هشت مقدار اول را X در نظر گرفته و آخرین مقدار را Y در نظر میگیریم. بین X و Y رابطه زیر برقرار است:
Y=F(X)
حالا با استفاده از کد زیر دیتا ست را بارگذاری میکنیم:
# 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]
آموزش مدل در کراس
یادگیری عمیق برابر است با یادگیری چندلایه. یک مدل شامل سلسلهاز لایهها است که در کنار هم قرار گرفتهاند. به این مدل «مدل سلسلهای» گفته میشود و در آن لایههای شبکه مصنوعی عصبی مدام در حال اضافه شدن هستند تا به تعداد لایههای دلخواه برسیم. برای دیتاستی که در مرحله قبل بارگذاری کردیم لایه ورودی شامل ۸ متغیر است. در اینجا باید با آرگومان input_dim این لایه را تشکیل دهیم.
اینکه به چند لایه نیاز خواهیم داشت سوالی نیست که پاسخ سادهای داشته باشد. معمولا طراحی شبکه مصنوعی عصبی با آزمون و خطا صورت میگیرد و نمیتوان برای آن چارچوب مطلقی تعیین کرد. در چنین موقعیتی، تجربه طراح شبکه عصبی مصنوعی نقشی کلیدی را ایفا میکند.
ویدیو پییشنهادی : آموزش پایتون جادی
هدف از این کار رسیدن به شبکهای است که بهاندازه کافی برای درک ساختار مسئله بزرگ باشد (لایه داشته باشد). در این مثال از یک شبکه سه لایه و کاملا متصل استفاده میکنیم. برای این شبکهها باید از کلاس Dense class استفاده کرد. اولین آرگومان ورودی این کلاس تعیینکننده تعداد لایهها بوده و آرگومان activartion وضعیت آن از لحاظ فعال بودن را مشخص میکند.
# 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'))
کامپایل کردن مدل کراس
حالا یک مدل تعریف شده داریم که آماده کامپایل شدن است. کامپایلر از کتابخانههای عددی بهینه در لایه بکاند برنامه (مثل Theano یا TensorFlow) برای کامپایل کردن استفاده میکند. بکان بهصورت خودکار بهترین راه برای تخصیص یک شبکه برای یادگیری و پیشبینی اتفاقات را پیدا میکند. بکاند همچنین میزان سختافزار مورد نیاز را مورد بررسی قرار میدهد. ممکن است بار یک شبکه بیشتر روی کارت گرافیک باشد و بار شبکهای دیگر بیشتر بر دوش سیپییو قرار گیرد.
# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
جاسازی مدل کراس
حالا که مدل ساخته و کامپایل شد، نوبت به هماهنگ کردن آن با دادههای واقعی میرسد. اینجا است که شبکه عصبی مصنوعی ما مثل یک نوزاد شروع به یادگیری و شناخت میکند تا بتواند در آینده نسبت به وقایع واکنشهای مناسب داشته باشد.
ویدیو پییشنهادی : آموزش هوش مصنوعی با نرمافزار متلب
یادگیری شبکه عصبی از طریق عملی به نام epoch صورت میگیرد که خود epoch به تعدادی batch تقسیم میشود. یک Epoch بهمعنای یک بار گذر کردن از تمام ردیفهای دیتاست تمرینی است و یک Batch معادل یک یا چند نمونه است که در هر لحظه (قبل از بهروزرسانی اوزان) توسط شبکه عصبی در نظر گرفته میشود. ما قرار است با تعیین مقدار این دو (با توجه به دیتاست هدف) مدلمان را آماده روبرویی با موقعیتهای واقعی کنیم.
# 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))
در کل یک برنامه برای تمرین دادن شبکه عصبی مصنوعی با دیتاست به این شکل است:
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))
اگر این برنامه را به پایتون در سیستم خود کپی کرده و با نام keras_first_network.py ذخیره کنید. اجرای آن از طریق دستور زیر ممکن است (دقت داشته باشید که فایل دیتاست pima-indians-diabetes.csv در همان پوشه باشد):
python keras_first_network.py
با یک سیستم معمولی، اجرای این برنامه حدود ۱۰ ثانیه طول میکشد و خروجی به این شکل خواهد بود:
۷۶۸/۷۶۸ [==============================] - ۰s 63us/step - loss: 0.4817 - acc: 0.7708
Epoch 147/150
۷۶۸/۷۶۸ [==============================] - ۰s 63us/step - loss: 0.4764 - acc: 0.7747
Epoch 148/150
۷۶۸/۷۶۸ [==============================] - ۰s 63us/step - loss: 0.4737 - acc: 0.7682
Epoch 149/150
۷۶۸/۷۶۸ [==============================] - ۰s 64us/step - loss: 0.4730 - acc: 0.7747
Epoch 150/150
۷۶۸/۷۶۸ [==============================] - ۰s 63us/step - loss: 0.4754 - acc: 0.7799
۷۶۸/۷۶۸ [==============================] - ۰s 38us/step
Accuracy: 76.56
نتیجه گیری
پایتون ابزاری کاربردی در زمینههای مختلف علوم کامپیوتر، مهندسی نرمافزار و علوم داده است. در حال حاضر این زبان جزو ده زبان برنامهنویسی برتر دنیا از لحاظ طرفدار، میزان استفاده و اشتغالزایی به شمار میرود. میتوان گفت بسیاری از پیشرفتهای امروزی دنیای دیجیتال را مدیون امکانات زبان برنامهنویسی پایتون هستیم.
مقاله پییشنهادی : برنامه نویسی هوش مصنوعی با پایتون را بهتر بشناسید
این زبان به متخصصان علوم داده اجازه میدهد شبکههای عصبی مصنوعی را با الگوریتمهای یادگیری عمیق تعلیم داده و در موارد مختلفی مثل بهبود موتورهای جستجو یا تشخیص حودکار غلطهای نگارشی به کار گیرند. پایتون کتابخانههای پرشماری برای کار با داده، بیگدیتا و یادگیری ماشین دارد.
استفاده از این ابزارها در گرو آشنایی با مبانی علم داده و پایتون است. در این مقاله سعی کردیم با ذکر یک مثال کاربردی، شما را با چگونگی پیادهسازی یک الگوریتم یادگیری عمیق در پایتون و آموزش یک شبکه عصبی مصنوعی برای تشخیص بیماری دیابت آشنا کنیم.