آموزش Keras در پایتون به صورت قدم به قدم
کرس (Keras) یکی از بهترین کتابخانه های یادگیری عمیق و شبکه عصبی منبع باز بوده که به زبان برنامه نویسی پایتون نوشته شده است. این کتابخانه میتواند در بالای TensorFlow یا Theano اجرا شود. Keras با تمرکز بر امکان آزمایش سریع توسعه داده شده و این امکان را برای نمونهسازی آسان و سریع مدلهای شبکه عصبی فراهم میکند. هم از شبکههای کانولوشنال و هم شبکههای تکراری و همچنین ترکیبی از این دو پشتیبانی می کند. در این مطلب آموزشی از مکتوب قرار است به آموزش Keras و ابعاد مختلف آن بپردازیم. پس با ما همراه باشید.
در این مقاله ما میخواهیم استفاده از کتابخانه کرس در زبان برنامهنویسی پایتون (Python) را آموزش دهیم و نشان دهیم که چگونه میتوان با استفاده از این کتابخانه یک شبکه عصبی (Neutal Network) را ساخت. شناخت بستههای علمی مثل Numpy و Pandas و همچنین آشنایی با کتابخانههای scikit-learn مطالبی هستند که جز پیشنیازهای یادگیری کتابخانه کرس به حساب میآیند. در ادامه مطلب با ما همراه باشید تا مطالب گفته شده در بالا را با هم فراگیریم.
معرفی کامل کتابخانه Keras
Keras یک کتابخانه یادگیری عمیق منبع باز و یکی از بهترین کتابخانه های پایتون محسوب میشود که به زبان پایتون نوشته شده است. این به عنوان یک API شبکههای عصبی سطح بالا توسعهیافته است که میتواند در بالای TensorFlow، CNTK یا Theano اجرا شود. Keras آزمایش سریع با مدلهای یادگیری عمیق را امکانپذیر میکند و از شبکههای کانولوشنال و شبکههای تکراری و همچنین ترکیبی از این دو پشتیبانی می کند. این کتابخانه پایتون به طور گسترده برای برنامههایی مانند تشخیص و پردازش تصویر، پردازش زبان طبیعی و تشخیص گفتار استفاده میشود. Keras دارای یک API کاربرپسند است که استفاده و اشکالزدایی آن را آسان می کند. Keras همچنین شامل تعدادی ابزار برای تجسم و درک مدلهایی است که میسازد.
Keras میتواند برای ایجاد مدلهای یادگیری عمیق پیچیده در چند خط کد مورد استفاده قرار گیرد و هم برای تحقیق و هم برای تولید مناسب است. Keras بسیار توسعهپذیر و امکان استفاده از موتورهای پشتیبان متعدد مانند TensorFlow، Theano و CNTK را فراهم می کند. در ادامه به آموزش keras و ابعاد مختلف آن خواهیم پرداخت.
ویژگی های کتابخانه کرس
کرس ویژگیهای بسیار قابلتوجهی دارد و میتواند در بالای TensorFlow، Microsoft Cognitive Toolkit، Theano یا PlaidML اجرا شود. Keras امکان نمونهسازی آسان و سریع را فراهم میکند، از شبکههای کانولوشنال و شبکههای تکراری پشتیبانی میکند و بهطور یکپارچه روی CPU و GPU اجرا میشود. همچنین دارای ابزارها و ویژگیهای مختلفی است که آن را برای یادگیری عمیق مناسب می کند. مهمترین این ویژگیها به صورت موارد زیر هستند:
- ماژولار و قابلترکیب، که امکان ساخت و سفارشیسازی آسان مدل را فراهم خواهد کرد.
- آسان برای استفاده و درک، با اسناد روشن و یک جامعه پشتیبان قوی.
- پشتیبانی از چندین کتابخانه دیگر، ازجمله TensorFlow، Microsoft Cognitive Toolkit، Theano، و PlaidML.
- پشتیبانی داخلی از شبکههای عصبی کانولوشنال و تکراری.
- قابلیت اجرای یکپارچه بر روی CPU و GPU.
- پشتیبانی از یادگیری انتقال و تنظیم دقیق.
- پشتیبانی داخلی برای افزایش دادهها.
- استقرار آسان بر روی پلتفرمهای ابری.
کاربرد کتابخانه کرس پایتون چیست؟
Keras یک کتابخانه پایتون است که میتواند برای ایجاد مدلهای یادگیری عمیق (deep learning) استفاده شود. کرس درواقع یک API شبکههای عصبی سطح بالا محسوب میشود که به زبان پایتون نوشته شده است و میتواند بر روی دیگر کتابخانههای معروف یادگیری ماشینی مانند TensorFlow اجرا شود.
یک مورد بالقوه استفاده از Keras ایجاد یک مدل بینایی کامپیوتری برای شناسایی اشیاء در تصاویر است. این مدل را میتوان با مجموعه دادهای از تصاویر با اشیاء برچسبگذاری شده، مانند ماشینها، درختان، حیوانات و غیره آموزش داد. پس از آموزش و پیکربندی مدل، میتوان از آن برای شناسایی اشیاء در تصاویر جدید استفاده کرد. کرس میتواند در یک سیستم خودکار برای شناسایی سریع و دقیق اشیاء، مانند یک ماشین خودران استفاده شود.
یکی دیگر از موارد استفاده بالقوه برای Keras برای پردازش زبان طبیعی (NLP) است. از Keras میتوان برای ساخت مدلهایی استفاده کرد که میتوانند متن زبان طبیعی را درک و تفسیر کنند. این مدلها را میتوان با مجموعهای از متن، مانند مقالههای خبری یا کتاب، آموزش داد و سپس برای تحلیل و تفسیر متن جدید استفاده کرد. این میتواند توسط یک سیستم خودکار برای پردازش و درک پرسوجوها یا دستورات زبان طبیعی استفاده شود. امروزه آموزش Keras اهمیت بسیار زیادی دارد و زیر بیشتر کاربردهای هوش مصنوعی و یادگیری ماشین به آن وابسته هستند.
نحوه نصب kears در سیستم عامل های مختلف
در این بخش از آموزش Keras به نحوه نصب آن در سیستمعاملهای مختلف خوهایم پرداخت که دستورات آن برای هر سیستمعامل به صورت موارد زیر است:
نصب Keras در ویندوز:
- پایتون را دانلود و نصب کنید.
- Anaconda را دانلود و نصب کنید.
- Anaconda Prompt را باز کنید و دستور مرحله 4 را برای نصب Keras تایپ کنید.
- pip install keras
نصب Keras در MacOS:
- پایتون را دانلود و نصب کنید.
- Anaconda را دانلود و نصب کنید.
- Anaconda Prompt را باز کنید و دستور مرحله 4 را برای نصب Keras تایپ کنید:
- conda install -c conda-forge keras
نصب Keras در لینوکس ابونتو:
- پایتون را دانلود و نصب کنید.
- Anaconda را دانلود و نصب کنید.
- دستور مرحله 4 را برای نصب Keras اجرا کنید:
- sudo apt-get install python-keras
آموزش keras به صورت گام به گام
در این بخش قدمبهقدم به آموزش keras در پایتون خواهیم پرداخت. به صورت کلی مراحل آموزش keras در پایتون به صورت قدمهایی است که در زیر به آنها اشاره شده است:
- قدم اول – نصب کتابخانه keras در پایتون: کتابخانه Keras را مطابق توضیحات بالا برای هر سیستمعامل نصب کنید.
- قدم دوم – ساخت اسکریپت پایتون: یک اسکریپت پایتون در ویرایشگر متن دلخواه خود ایجاد کنید. اسکریپت حاوی کدی خواهد بود که با کتابخانه تعامل خواهد داشت.
- قدم سوم – ایمپورت کردن کتابخانه: در اسکریپت خود، کتابخانه Keras را باید ایمپورت کنید.
- قدم چهارم – ایجاد یک مدل: یک مدل با استفاده از یکی از معماریهای ترجیحی ایجاد کنید.
- قدم پنجم – کامپایل مدل: مدل را با استفاده از تابع کامپایل کتابخانه Keras کامپایل کنید.
- قدم ششم – تقسیم داده به دو مجموعه آموزش و تست: با استفاده از توابع fit and train کتابخانه Keras، مدل را بر روی مجموعه داده خود قرار داده و آموزش دهید.
- قدم هفتم – ارزیابی مدل: عملکرد مدل را روی مجموعه داده با استفاده از تابع ارزیابی کتابخانه Keras ارزیابی کنید.
- قدم هشتم – پیشبینی: با استفاده از تابع پیشبینی کتابخانه Keras روی دادههای دیده نشده پیشبینی کنید.
- قدم نهم – ذخیره مدل: مدل را برای استفاده بعدی با استفاده از تابع ذخیره کتابخانه Keras ذخیره کنید.
- قدم دهم – مدل را مجدداً راهاندازی کنید: با استفاده از تابع load_model کتابخانه Keras، مدل را برای آموزش بیشتر مقداردهی مجدد کنید.
کل فرایند آموزش keras به صورت قدمهای بالا است که دە ادامه نمونههای عملی آن را بررسی خواهیم کرد.
کلاس و توابع در کتابخانه kears
Keras یک API سطح بالا برای ساخت مدل های یادگیری عمیق است. مجموعه ای از کلاس ها و عملکردها را برای کمک به ایجاد و آموزش مدل های یادگیری عمیق ارائه می دهد.
کلاس و توابع اصلی در کتابخانه Keras عبارتاند از:
- Model: این کلاس برای ایجاد مدل شبکه عصبی که از لایهها تشکیلشده است استفاده میشود.
- Sequential: این کلاس برای ایجاد یک پشته خطی از لایهها استفاده میشود.
- Dense: از این کلاس برای ایجاد یک لایه متصل متراکم استفاده میشود.
- Activation: این کلاس برای افزودن یک تابع فعال سازی به یک لایه استفاده میشود.
- Convolutional: از این کلاس برای ایجاد یک لایه کانولوشنال استفاده میشود.
- MaxPooling: این کلاس برای ایجاد یک لایه max pooling استفاده میشود.
- Dropout: این کلاس برای ایجاد لایه dropout استفاده میشود.
- Flatten: از این کلاس برای صاف کردن لایه ورودی استفاده میشود.
- Optimizers: این کلاس برای تعریف بهینهساز مورد استفاده برای آموزش مدل استفاده میشود.
- Losses: این کلاس برای تعریف تابع ضرر مورد استفاده برای محاسبه خطای مدل استفاده میشود.
- Metrics: از این کلاس برای تعریف معیارهای لازم استفاده میشود.
آموزش یک شبکه عصبی مصنوعی
برای یادگیری شبکه عصبی مصنوعی (Artificial Neural Network) نیاز است که مراحل زیر را طی کنید:
- مقداردهی اولیه: وزنها باید مقداردهی شوند که این اتفاق بهصورت تصادفی صورت خواهد گرفت و با مقدارهای نزدیک به صفر انجام خواهد شد.
- مجموعه دادهها به قسمت ورودی نشان داده شود.
- برای اینکه نورونها فعال شوند و مقدارهایی که پیشبینی شدهاند نمایان گردند، باید انتشار به جلو از سمت چپ به سمت راست اتفاق افتد.
- اندازهگیری نرخ خطا: برای بهدستآوردن نرخ خطا باید مقادیر واقعی با مقدارهای پیشبینی شده توسط کامپیوتر مقایسه گردند تا مقدار خطا محاسبه شود.
- بازگشت به عقب از سمت راست به سمت چپ، اتفاق بیافتد تا وزنها تنظیم شوند.
- مراحل از اول تا به مرحله گفته شده مجدداً تکرار شوند.
- در نهایت، وقتیکه همه Train Set یا همه مجموعه آموزش از شبکه عصبی عبور کند، یک Epoch یا دوره اتفاق خواهد افتاد.
ویدئو پییشنهادی : آموزش یادگیری ماشین لرنینگ با پایتون
ساخت شبکه عصبی مصنوعی
ایمپورت کردن کتابخانه کرس را میتوان اولین گام برای ساختن یک شبکه عصبی مصنوعی دانست. بعد از انجام این کار، نیاز است که چند ماژول از کتابخانه کرس را نیز ایمپورت کنید. از ماژول Dense برای اینکه لایههای شبکه عصبی مصنوعی ساخته شود، استفاده میشود، همچنین از ماژول Sequential برای مقداردهیهای اولیه به شبکه عصبی مصنوعی استفاده میگردد. در ابتدا در پایتون کد زیر را مینویسیم:
import keras |
پس از آن با استفاده از تکه کد زیر ماژولهای گفته شده را ایمپورت میکنیم:
|
حال نیاز است که شبکه عصبی مصنوعی یا ANN را مقداردهی اولیه کنیم. این کار با ساختن یک نمونه از تابع Sequential انجام میگیرد. با کمک این تابع پشته خطی از لایهها (keras layers) مقداردهی اولیه میشوند. این کار سبب خواهد شد تا کاربر بتواند بعدها نیز با کمک گرفتن از ماژول Dense لایههایی را به برنامه اضافه کند.
برای توضیحات بالا، باید در پایتون کد زیر نوشته شود:
classifier = Sequential() |
لایههای ورودی و خروجی در شبکه عصبی مصنوعی
برای اینکه لایههای مختلف را به یک شبکه عصبی اضافه کنیم، باید از روش add استفاده کنیم. به مقادیری که در توابع نوشته میشود پارامتر میگویند. اولین مقداری که در تابع add نوشته میشود، تعداد گرههایی است که به این لایه توسط کاربر اضافه خواهد شد. به تعداد دلخواه میشود گره به لایه اضافه کرد، زیرا هیچ تعداد خاصی در نظر گرفته نشده است. البته بهتر است که با توجه به میانگین بین تعداد گرههایی که در لایه ورودی است و تعداد گرههایی که در لایه خروجی وجود دارد، تعداد گرههای مدنظر را انتخاب کرد.
به طور مثال، ۶ متغیر مستقل و ۲ متغیر خروجی در لایه وجود داشته باشد، مجموع آنها عدد ۸ میشود که با تقسیمبر ۲ برابر میشود با عدد ۳، پس در این مثال بهتر است که ۳ گره به لایه اضافه گردد. روش دیگری که با آن میشود این مورد را بررسی کرد Parameter Tuning یا همان تنظیم پارامتر نام دارد.
پارامتر دوم Kernel_initializer نام دارد که از آن برای مقداردهی اولیه به وزنها بهره گرفته میشود. در چنین حالتی برای اینکه مطمئن شوند که وزنها، عددهایی کوچک هستند که به صفر نزدیکاند، از Uniform Distribution یا همان توزیع یکنواخت استفاده میشود.
پارامتری که بعد از دو پارامتر نامبردهشده استفاده میشود Activation Function به معنی تابع فعالسازی است. در این بخش بهعنوان تابع فعالسازی از یک تابع یکسوساز به طور خلاصه استفاده میشود. در بیشتر مواقع برای لایه پنهان در ANN از این تابع بهره گرفته میشود. در نهایت، پارامتر آخر input_dim است که برای محاسبه کردن تعداد گرههایی که در لایه پنهان است، مورد استفاده قرار میگیرد. برای دانستن تعداد متغیرهای در کتابخانه کرس مستقل میتوان به این پارامتر مراجعه کرد.
نحوه استفاده از پارامترهای گفته شده در بالا بهصورت زیر در زبان پایتون است:
classsifier.add |
روش اضافهکردن، دومین لایه پنهان دقیقاً مطابق مطالب گفته شده در بالا و مانند اضافهکردن اولین لایه پنهان است:
به تکه کد زیر دقت کنید:
|
توجه کنید که در این قسمت احتیاجی به تعیین کردن مقدار پارامتر input_dim نیست به دلیل اینکه این پارامتر در اولین لایه پنهان و تکه کد قبلی مشخص گردیده است. با توجه به این متغیر که در اولین لایه پنهان مقداردهی شده است، لایه این موقعیت را دارد که بداند چه تعدادی گره از داده های ورودی، اضافه خواهد شد. در دومین لایه پنهان، وظیفه ANN است که بداند باید منتظر چه تعدادی از گرههای ورودی باشد، پس بههیچعنوان احتیاجی به تکرار مجدد این کار نیست.
برای اضافهکردن لایه خروجی، باید اولین پارامتر عوض شود چون در گره خروجی، انتظار میرود که یک گره خارج شود. برای انجام این کار میتوان از تابع Sigmoid Activation Function یا همان تابع فعالسازی سیگموئید، بهره گرفت. گاهی شرایطی پیش میآید که نیاز به دستهبندی است و برنامه بیشتر از دو کلاس دارد مانند دستهبندی میمونها و … در این مواقع نیاز است که دو مقدار تغییر کنند. پارامتر اول را باید به مقدار دستهبندی تغییر داد. مثلاً اگر سه دستهبندی داریم، پارامتر اول باید به عدد ۳ تغییر کند. همچنین تابع فعالسازی را به مقدار Softmax تغییر دهیم. اگر این سؤال برای شما پیشآمده است که سافت مکس چیست؟ باید بگوییم که سافت مکس تابع سیگموئیدی است که به یک متغیر مستقلی که بیشتر از دودسته دارد، اعمال میشود.
برای توضیحات گفته شده در ارتباط با لایه خروجی، در زبان برنامهنویسی پایتون و در کتابخانه کرس، کد زیر باید نوشته شود:
|
کامپایل کردن شبکه عصبی مصنوعی
کامپایل کردن به زبان انگلیسی Compiling یعنی اعمال کردن Stochastic Gradient (گرادیان کاهشی تصادفی) به همه شبکه عصبی مصنوعی.
در این قسمت اولین پارامتر، یک الگوریتم است که با استفاده از آن مجموعه بهینهای از وزنها در شبکه عصبی مصنوعی را تعیین میکنند. انواع مختلف و گوناگونی از این پارامترها موجود است. یکی از الگوریتمهای بسیار مؤثر و کارآمد برای کار گفته شده در بالا، Adam است.
دومین پارامتر در این بخش، تابع زیان یا بهاصطلاح انگلیسی Loss Function است که این مقدار داخل الگوریتم گرادیان کاهشی تصادفی است. به دلیل اینکه طبقهها دودوییاند، در این حالت از تابع binary_crossentropy استفاده میشود. اما در حالت دیگر categorical_crossentopy مورداستفاده قرار گرفته میشود. برای ارزیابی مدل از آرگومان نهایی استفاده میشود. مثال زیر تکه کدی در ارتباط با Accuracy (صحت) است که برای ارزیابی مدل مورداستفاده قرار میگیرد.
|
در این بخش از آموزش کتابخانه kears به تکه کد زیر توجه کنید:
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100) |
پارامتر X_train آن متغیرهایی را نشان میدهد که مستقل هستند و برای آموزش شبکه عصبی مورداستفاده قرار میگیرند. ستونی که پیشبینی میشود را با مقدار y_train نشان میدهند. مقدار وارد شده در بخش Bath_size تعداد مشاهداتی است که طبق آن وزنها به روز رسانی میشوند. همچنین تعداد دفعاتی که مجموعه دادههای کامل به شبکه عصبی انتقال داده خواهند شد را با مقدار وارد شده جلوی پارامتر Epochs نشان داده میشود.
به کدی که در پایین نوشته شده است دقت کنید:
y_pred = classifier.predict(X_test) |
برای اینکه مطمئن شوید که یک ادعا کلاهبرداران است یا نه میتوانید از کد بالا استفاده کنید. آستانهای که برای دستهبندی کردن یک ادعا بهعنوان کلاهبرداری، حساب میشود ۵۰% است. این به این معنا است که هر ادعا گفته شده با احتمال ۰٫۵ یا بیشتر میتوان یک ادعا کلاهبرداری محسوب شود.
y_pred = (y_pred > 0.5) |
به این صورت شرکت بیمه میتواند بهراحتی ادعاها را پیگیری کند و زمان زیادی را صرف ارزیابی ادعاهایی بکند که بهعنوان ادعای کلاهبرداری هایلایت شدهاند.
ویدئو پییشنهادی : آموزش برنامهنویسی با پایتون (پیشرفته)
بررسی ماتریس درهمریختگی
اصطلاح Confusion Matrix یا همان ماتریس درهمریختگی در کتابخانه کرس را میتوان به این صورت تعریف کرد که؛ از بین ۲۰۰۰ مشاهده، ۱۵۵۵ + ۱۷۰ مشاهده انجام شده بهدرستی پیشبینی شدهاند. در صورتی که ۴۰ + ۲۳۰ مورد مشاهده شده بهاشتباه پیشبینی شدهاند. برای به دست آوردن صحت مطلب میتوان تعداد پیشبینیهای صحیح را به کل پیشبینیها تقسیم کرد و مقدار بهدستآمده صحت خواهد بود. حال با توجه به مثال گفته شده در بالا (۱۷۰ + ۱۵۵۵) تقسیمبر ۲۰۰۰ برابر با صحت ۸۷٪ میشود.
کد زیر نحوه تعریف ماتریس درهمریختگی در پایتون است:
|
به مثال زیر توجه کنید:
به طور مثال فرض میکنیم که یک شرکت بیمه ادعایی را به دادهکاوی میدهد و میخواهد بداند که آیا این ادعا یک ادعای کلاهبرداری است یا نه.
به نظر شما با توجه به توضیحاتی که در این مقاله داده شد چگونه میتوان به چنین موضوعی پی برد؟
کد زیر را بنویسید:
new_pred = classifier.predict(sc.transform(np.array([[a,b,c,d]]))) |
در کدی که بالا نوشتیم، مقدارهای a, b, c, d نشانگر ویژگیهایی هستند که موجودند.
سپس باید کد زیر نوشته شود:
new_pred = (new_prediction > 0.5) |
ارزیابی شبکه عصبی مصنوعی ساخته شده
شما عزیزان بهراحتی میتوانید پس از یادگیری یک یا چند مدل متوجه شوید که صحتهای متفاوتی به وجود میآید. در این صورت نمیتوان اطمینان حاصل کرد که کدامیک از صحتهای به وجود آمده صحیح هستند. بدین ترتیب همین موضوع سبب بهوجودآمدن مسئله موازنه بایاس و واریانس که اصطلاح انگلیسی Bias Variance Trade-Off است میشود. البته در نظر داشته باشید که تلاش زیادی میشود تا مدلی به کاربران آموزش داده شود که صحیح باشد و پس از چند بار آموزشدادهشده، واریانس زیادی برای صحت وجود نداشته باشد.
برای حل کردن چنین مسئلهای از اعتبارسنجی متقابل -k fold با مقدار k برابر با ۱۰ استفاده میشود. این عمل سبب خواهد شد که مجموعه آموزش بر روی Fold برابر با ۱۰ تنظیم شود. بعد مدل روی fold برابر با ۹ آموزش داده خواهد شد و روی foldهای باقیمانده تست انجام خواهد شد. به دلیل اینکه fold برابر با ۱۰ است، تلاش میشود تا این کار از طریق ۱۰ ترکیب بهصورت بازگشتی انجام شود.
هر تکراری که انجام شود سبب بهوجودآمدن سه صحتی شود. پس از انجام تمام این مراحل همه صحتها با هم جمع و میانگین آنها محاسبه میشود و در نهایت بهعنوان صحت مدل از آن استفاده میشود. البته توجه داشته باشید که در همه این موارد واریانس نیز محاسبه خواهد شد تا اطمینان حاصل گردد. چیزی که کاربر را قادر میسازد تا اعتبارسنجی متقابل k-fold را در کد Keras قرار دهد، KerasClassifier است که یک پوشش از کتابخانه کرس است.
from keras.wrappers.scikit_learn import KerasClassifier |
پس از نوشتن کد بالا، تابع اعتبارسنجی K-fold از scikit_learn ایمپورت میگردد.
from sklearn.model_selection import cross_val_score |
به کدهایی که در پایین نوشته شده است توجه کنید:
|
این تابع Classifier را میسازد، همچنین آن را برای استفاده شدن در گام بعدی بازگردانی میکند. در این مرحله باید پوششدهی انجام شود. نهایتاً با استفاده از اعتبارسنجی متقابل K-fold یک دستهبندی جدید ساخته میشود و پارامتر build_fn به عنوان یک تابع ساخته خواهد شد.
|
برای لحاظکردن تابع اعتبارسنجی متقابل K-fold از تابع cross_vol_score کتابخانه scikit-learn استفاده میشود. با استفاده از make_classifier یک برآوردگر دستهبندی ساخته خواهد شد و n_jobs=-1 سبب خواهد شد تا از همه پردازندههای موجود بتوان استفاده کرد. مقدار cv تعداد foldها است که مقدار ۱۰ یک انتخاب رایج و متداول است.
|
برای اینکه تطابق نسبی یا Relative Accuracies به دست آورده شود، میانگین صحتها گرفته میشود.
mean = accuracies.mean() |
توجه کنید که واریانس را میتوان به صورت زیر محاسبه کرد. هدف ما داشتن واریانس کمبین صحتها است. به کد زیر در زبان برنامهنویسی پایتون و در کتابخانه کرس توجه کنید:
variance = accuracies.var() |
مبارزه با بیش برازش در کتابخانه کرس
در یادگیری ماشین، بیش برازش یا Overfitting زمانی اتفاق میافتد که مدل جزئیات و نویز موجود در مجموعه داده را میآموزد و در نتیجه این عمل روی مجموعه داده، یک تست ضعیف اعمال میشود. زمانی که تفاوت زیادی مابین صحت مجموعه تست و مجموعه آموزش وجود داشته باشد این اتفاق مشاهده خواهد شد. همچنین میتوان گفت این اتفاق زمانی نمایش داده خواهد شد که واریانس بالایی موقع اعمال اعتبارسنجی متقابل K-fold موجود باشد. در شبکههای عصبی مصنوعی یا ANN با استفاده از روشی به نام Dropout Regularization با این مسئله مقابله میگردد. روش Dropout Regularization با غیرفعالسازی بهصورت تصادفی، بعضی از نورونها، در هر بار تکرار از آموزش برای جلوگیری از مستقل بودن بیشتر از مقدار آنها نسبت به یکدیگر عمل میکند.
|
در مثال نوشته شده در بالا، میتوان بعد از اولین لایه خروجی و همچنین پس از دومین لایه پنهان dropout را انجام داد. استفاده کردن از نرخ ۰٫۱ به این معنی است که فقط ۱٪ از نورونها در هر بار تکرار غیرفعال خواهند شد. پیشنهاد ما به شما کاربران عزیز این است که با نرخ ۰٫۱ کار را انجام دهید. به این نکته توجه کنید که هرگز نباید بیشتر از ۰.۴ کار شود زیرا مدل دچار Underfitting یا همان کم برازش خواهد شد.
تنظیم پارامتر
زمانی که صحت مدنظر شما به دست آمد، دیگر میتوان پارامترها را برای بهدستآوردن صحت بالاتر تنظیم کرد. کاربر به سهولت میتواند با جستوجوی Grid پارامترهای مختلف را محاسبه کند تا به بهترین پارامتر دست یابد. اولین مرحله در این قسمت ایمپورت کردن ماژول GridSearchCV است که این کار باید از sklearn انجام شود.
به کد نوشته شده در پایین توجه کنید:
from sklearn.model_selection import GridSearchCV |
پس از انجام مراحل گفته شده، نیاز است که تابع make_classifier ویرایش گردد. برای اینکه امکان افزایش بیشتر از یک بهینهساز در متغیر params به وجود آید، باید یک متغیر جدید با نام optimizer ساخته شود.
توضیحات گفته شده در میتوان به صورت زیر در پایتون نوشت:
|
در تکه کد زیر پارامترهای تابع KerasClassifier تنظیم میشوند:
classifier = KerasClassifier(build_fn = make_classifier) |
مرحله بعدی که باید انجام شود ساختن یک دیکشنری است که در آن پارامترهایی است که تعداد دورهها و تابع batch size تنظیم میشوند. از adam نیز در اینجا به عنوان یک بهینهساز استفاده میشود. همچنین یک بهینهساز جدید نیز با عنوان rmsproo اضافه میگردد. همیشه در سندهای Keras استفاده کردن از بهینهساز rmsprop در زمان کار شبکههای عصبی بازگشتی توصیه میشود.
در اصطلاح انگلیسی به شبکههای عصبی بازگشتی Recurrent Neural Network گفته میشود. البته میتوان از آن بهینهساز برای شبکه عصبی مصنوعی یا ANN هم استفاده کرد. با این عمل میتوان تأثیر بهینهساز را بر بهبود نتایج در کتابخانه کرس بررسی کرد.
|
در آخر برای تست پارامترها از Grid Search استفاده خواهد شد. کار تابع Grid Search این است که از برآوردگر پارامترها که تعریف شدهاند، تعداد K-foldها و همچنین سنجه امتیازدهی را میخواهد.
کد زیر نحوه کدنویسی تابع Grid Search در زبان برنامهنویسی پایتون است:
|
نیاز است که همانند اشیای قبلی، مجموعه داده آموزش را پردازش کرد.
grid_search = grid_search.fit(X_train,y_train) |
با استفاده از best_params میتوان بهترین انتخاب از پارامترها را از شیء Grid search گرفت. به همین دلیل از best_score- میتوان برای گرفتن بهترین امتیاز کمک گرفت.
|
البته بهتر است که توجه کنید فرایند گفته شده زمانبر و طولانی است، زیرا برای بهدستآوردن بهترین پارامترها جستوجو میکند.
مثالی از آموزش keras در پایتون
در این بخش از آموزش keras به بررسی ٢ مثال مهم دیگر خواهیم پرداخت که این ٢ مثال به خصوص برای افراد مبتدی بسیار حائز اهمیت است. مثال کد زیر از کتابخانه keras برای ساخت مدل شبکه عصبی استفاده خواهد کرد. این مدل نتیجه یک مشکل طبقهبندی باینری را پیشبینی میکند. دادههای مورد استفاده برای آموزش مدل مجموعهای از نقاط 2 بعدی با برچسب (0 یا 1) است که نشان میدهد آیا نقطه بخشی از کلاس مثبت (1) است یا کلاس منفی (0). برای این هدف مانند کد زیر ابتدا کتابخانههای لازم را از keras وارد میکنیم:
from keras.models import Sequential
from keras.layers import Dense
سپس، معماری مدل را با استفاده از Sequential API تعریف میکنیم. این مدل از یک لایه منفرد با 2 نورون و تابع فعالسازی سیگموئید تشکیل شده است:
model = Sequential()
model.add(Dense(2, activation='sigmoid'))
در مرحله بعد، مدل را کامپایل کرده و تابع زیان (Loss Function)، بهینهساز و معیارها را مشخص میکنیم:
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
در نهایت در این مرحله از آموزش keras، مدل را بر روی دادههای آموزشی قرار داده و آن را روی دادههای آزمون ارزیابی میکنیم تا دقت را به دست آوریم:
model.fit(x_train, y_train, batch_size=32, epochs=50)
score = model.evaluate(x_test, y_test, batch_size=32)
خروجی چیزی به صورت زیر خواهد بود:
Epoch 1/50
32/32 [==============================] – 0s 1ms/step – loss: 0.6834 – accuracy: 0.5625
Epoch 2/50
32/32 [==============================] – 0s 1ms/step – loss: 0.6739 – accuracy: 0.5625
…
Epoch 50/50
32/32 [==============================] – 0s 1ms/step – loss: 0.1023 – accuracy: 0.9500
32/32 [==============================] – 0s 1ms/step – loss: 0.1353 – accuracy: 0.9500
مثال ٢ از آموزش keras
این مثال از آموزش کرس کدهای کتابخانه Keras با TensorFlow برای ساخت یک شبکه عصبی کاملاً متصل ساده با یکلایه پنهان که دارای سه نورون است استفاده خواهد کرد. با دستور زیر ابتدا کتابخانهها و توابع لازم را از keras وارد میکنیم.
import keras
from keras.models import Sequential
from keras.layers import Dense
در مرحله بعد سپس یک مدل متوالی (sequential model) تعریف شده و یک لایه پنهان منفرد با سه نورون اضافه خواهد شد.
model = Sequential()
model.add(Dense(3, input_dim=1, activation='relu'))
مرحله بعدی اضافه کردن لایه خروجی با یک نورون منفرد و تابع فعالسازی سیگموئید (sigmoid activation function) باید انجام شود:
model.add(Dense(1, activation='sigmoid'))
آخرین مرحله کامپایل مدل با تابع ضرر آنتروپی متقاطع باینری (binary cross-entropy loss function) و بهینهساز Adam است:
model.compile(loss='binary_crossentropy', optimizer='adam')
خروجی این کد یک مدل شبکه عصبی کامپایل شده است به صورت زیر خواهد بود:
Model: “sequential_1”
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 3) 6
_________________________________________________________________
dense_2 (Dense) (None, 1) 4
=================================================================
Total params: 10
Trainable params: 10
Non-trainable params: 0
سخن پایانی
یکی از نتیجهگیریهایی که میتوان پس از خواندن مقاله آموزش Keras، به آن رسید این است که شبکه عصبی عمیق فقط یکی از انواع شبکههای عصبی مصنوعی محسوب میشوند. از دیگر شبکههای عصبی مصنوعی میتوان به شبکههای عصبی پیچشی یا Convolutional Neural Network، بهصورت اختصار CNN و همچنین شبکههای عصبی بازگشتی یا Recurrent Neural Networks، بهاختصار RNN اشاره کرد.
شبکههای عصبی پیچشی یا CNN نیز در بینایی کامپیوتر مورداستفاده قرار میگیرند. تشخیص حضور سلولهای سرطانی در عکسهای گرفته شده در تصویربرداری از مغز و همچنین تشخیص گربهها و سگها در یک مجموعه، جزء کارهای شبکههای عصبی پیچشی محسوب میشود. ماشین بولتزمن علاوه بر پیشبینی بورس که در آینده اتفاق خواهد افتاد، امروزه در سیستمهای توصیه گر برنامهنویسی نیز مورداستفاده قرار میگیرد. امیدواریم با مطالعه این مقاله در رابطه با کتابخانه کرس اطلاعات مفیدی کسب نموده باشید.