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

مدل های Keras

یک مدل (Model) ساختمان داده (Data Structure) پایه ای در Keras، که روشی برای سازماندهی کردن لایه ها است. این مدل ها به دو دسته Sequential و Functional دسته بندی می شوند که ازمیان آنها، Sequential ساده ترین شیوه سازماندهی کردن لایه ها است. ایده Sequential بدین گونه است که یک برای ساخت یک مدل، هر لایه پس از لایه دیگری ساخته و افزوده می شود. توجه کنید بر پایه مفاهیم یادگیری ماشین و شبکه عصبی و یادگیری ژرف، مدل همانی است که به کمک مجموعه داده های یادگیری، آموزش دیده (Train شده) تا بتوانیم پس از این، به کمک آن و داده های تازه، پیش بینی هایی را انجام دهیم.

مدل ترتیبی یا Sequential، دارای محدودیت است و این است که اجازه نمی دهد که مدل هایی را ایجاد کنید که لایه ها را به اشتراک بگذارند یا و یانکه چندین ورودی یا خروجی داشته باشند. کد زیر نمونه ساده ای از مدل Sequential را نشان می دهد که با فهمیدن همین کد ساده، شما پروژه های پیش رو را به سادگی خواهید فهمید.

دو خط نخست، دو کلاس به نام Sequential و Dense را به برنامه پیوست کرده اند و به دنبال یک نمونه به نام model از کلاس Sequential (به کمک تابع سازنده آن) ساخته شده است. سپس در دو بَند (خط) پَسین، دو بار متد ()add از کلاس Sequence فراخوانی شده است که درون این فراخوانی، تابع سازنده کلاس Dense فراخوانی شده است. برای تابع سازنده Dense می توانید شماری از آرگومان ها را مقدار دهی کنید. که در دنباله آنها را خواهیم گفت. اگر به یاد داشته باشید، گفتیم که اگر از هر نورون لایه ورودی به همه نورون های لایه پنهان یک اتصال (یال) باشد، پس آن را Full Connected می گوییم. Dense ویژگی است که برای ساخت شبکه عصبی Full Connected به کار می رود.

تا بدین جا، لایه های مدل را درون برنامه شناسانده ایم و اکنون باید مدل را با متد ()compile، کامپایل کنیم. کامپایل کردن گامی است که دیگر ویژگی های مدل مانند تابع هزینه یا Loss Function و بهینه سازی مشخص می شوند. در کد بالا در متد ()compile، تابع هزینه binary_crossentropy و بهینه ساز adam به کار گرفته شده اند. سپس به کمک ()fit گام یادگیری مدل از روی مجموعه داده ها (در اینجا x_train و y_train) انجام می شود.

باز هم یادآوری می کنیم که، مجموعه داده های نخستین به دو زیر مجموعه یادگیری (Train) و آزمایش (Test) شکسته می شوند. در بند پسین و به کمک متد ()evaluate، مدل ساخته شده با مجموعه داده آزمایش ارزیابی می شود. در دنباله، با متد ()predict، با داده ای تازه پیش بینی انجام می شود. در اینجا داده های تازه، همان داده های آزمایش هستند. بنابراین برای ارزیابی درست، باید مدل ساخته شده به کمک متد ()fit را با داده های تازه و نه داده های آموزشی، ارزیابی کنیم. همچنین پیش بینی نیز با داده های تازه انجام می شود. که می تواند از ورودی های گوناگون مانند یک برنامه وب باشد. همچنین به یاد دارید که داده ها ورودی در شبکه عصبی و همچنین فریم ورک Keras باید به گونه بردار (یک بردار یا آرایه ای از بردارها برای چندین ورودی) باشد.

کلاس Dense و مفهوم آن در Keras

کد زیر الگوی کلی تابع سازنده کلاس Dense را نشان می دهد که در اینجا می خواهیم برخی از پایه ای ترین آنها را آموزش دهیم. توجه کنید که تابع سازنده این کلاس، درون متد ()add از کلاس Sequential فراخوانی می شود. Dense کلاسی است که برای ساخت لایه ها در Keras به کار می روند و همانگونه که گفتیم لایه ها Full Connected خواهند بود.

بَند (خط) زیر الگویی از عملکرد لایه Dense را نشان می دهد که در آن activation همان تابع فعال سازی است که در آرگومان به نام activation مشخص می شود. نیازی نیست شما خودتان تابع فعال سازی را دستی بنویسید، بلکه Keras همه آن مفاهیم و نیازمندی میان بر روی بردار (Vector) ورودی ها (input) و ماتریس (یا کرنل – kernel) وزن ها انجام می شود. در واقع هر ورودی در وزن خودش ضرب و حاصل همه آنها با هم جمع شده و حاصل با مقدار بایاس (bias) جمع شده و حاصل این محاسبه ها به تابع فعال سازی فرستاده می شود.

آرگومان unit

این آرگومان، شماره ای مثبت را دریافت می کند که شمارِ (تعداد) خروجی لایه را مشخص می کند.

آرگومان activation

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

آرگومان kernel_initializer

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

کامپایل کردن مدل

کامپایل مدل، گامی است که پیش از یادگیری یا Train کردن مدل انجام می شود. در واقع، گام کامپایل که به کمک متد ()compile از کلاس Sequential انجام می شود، گامی است که در آن پیکربندی های لازم برای یادگیری مدل، مشخص می شوند. آرگومان optimizer، یا یکی از دو مقدار رشته ای rmsprop یا adagrad و یا نمونه از کلاس Optimizer را دریافت می کند. آرگومان loss، تابع هزینه (Loss Function یا Cost Function) را مشخص می کند. برای نمونه می توانید یکی از مقدار های mean_squared_error یا binary_crossentropy یا categorical_crossentropy را برای این آرگومان مشخص کنید. این دو آرگومان، دو آرگومان اجباری متد ()compile هستند ولی آرگومان دیگری به نام metrics است که یک list از رشته ها دریافت می کند که هر المان این لیست، یکی از معیارها مانند accuracy است.

یادگیری، گام پایانی

در متد ()fit با داشتن مجموعه داده یادگیری، که در برگیرنده ویژگی ها (Features) و برچسب ها (Labels یا Classes) هستند، می خواهیم مدل را Train کنیم یا آموزش دهیم. آرگومان x همان ویژگی ها و y همان برچسب ها هستند که برای آگاهی بیشتر، پیشنهاد می کنم پیوندهای زیر را بخوانید. batch_size یکی از آرگومان هایی است که یا شماره صحیح یا None را دریافت می کند و شمارگان (تعداد) نمونه های هر Gradient Update را مشخص می کند. اگر هیچ مقداری (یا شماره صحیح یا None) را برای آن مشخص نکنید، پس شماره پیش فرض 32 به کار خواهد رفت. کد زیر الگوی متد ()fit را نشان می دهد. epoch (که دوره ترجمه می شود) شمارگان تکرارهای (Iteration) روی داده های آرگومان های x و y را نشان می دهد.

دو مفهوم Epoch و Batch Size و پیوند آنها با گرادیان کاهشی و بهینه سازی در نوشته مفاهیم Epoch و Batch Size در شبکه عصبی و یادگیری ژرف گفته شده اند.

مفاهیم و واژگان در یادگیری ماشین

الگوریتم های نظارت شده و نظارت نشده

ایجاد داده های یادگیری و آزمایش در Scikit-Learn