بخش دوم: یادگیری عمیق با کراس Deep Learning with Keras

Building first neural network in Keras (Part #1)

ساخت اولین شبکه عصبی در کراس (قسمت اول)

در این مطلب، اولین شبکه عصبی (ANN) خود را با استفاده از پلتفرم Keras ایجاد خواهیم کرد. قبل از شروع می خواهم یک توضیح کلی در مورد نحوه ساخت هر پروژه یادگیری عمیق ارائه دهم.

1- پیش پردازش داده‌ها: داده‌ها، کلید کار در شبکه عصبی هستند و باید آن‌ها را قبل از تزریق به شبکه عصبی پردازش کنیم. در این مرحله داده‌های اولیه را به داده‌هایی تبدیل خواهیم کرد که بتوانند در استخراج دانش به ما کمک کنند.

2- تعریف مدل: پس از پیش‌پردازش داده‌ها، ما نیاز به یک مدل شبکه عصبی نیاز داریم، به این معنی که باید لایه ورودی، خروجی و لایه‌های پنهان میانی را مشخص کنیم.

3- هزینه و بهینه سازی: اکنون زمان تعریف یک تابع هزینه است که بتواند فعالیت ما را تعریف کند. همچنین ما نیاز به یک بهینه ساز جهت استفاده در نرخ آموزش و سایر پارامترهای بیش از اندازه داریم.

4- مناسب‌سازی مدل: این گام، مرحله آموزش شبکه عصبی است. در این مرحله ما باید تعداد گام‌های (epochs) مورد نیاز آموزش شبکه عصبی را مشخص کنیم.

پس از انتخاب مدل مناسب، می‌توانیم داده‌های آزماشی را به آن می دهیم تا بررسی کنیم که over-fitting نداشته باشیم. ما می‌توانیم وزن‌های مدل را دخیره کنیم و بعدا درصورت نیاز از آن استفاده کنیم.

 

پردازش داده‌ها:

برای مثال از داده‌های طبقه‌بندی کننده قیمت موبایل استفاده می کنیم. دیتاست ما شامل 20 ویژگی است که می‌بایست با استفاده از آن‌ها پیش‌بینی کنیم که کدام موبایل در این دسته بندی قرار نمی گیرد. این ویژگی‌ها موبایل‌ها را به چها دسته تقسیم می کند که ویژگی‌های دیتاست ما شامل موارد زیر است:

‘battery_power’, ‘blue’, ‘clock_speed’, ‘dual_sim’, ‘fc’, ‘four_g’, ‘int_memory’, ‘m_dep’, ‘mobile_wt’, ‘n_cores’, ‘pc’, ‘px_height’,’px_width’, ‘ram’, ‘sc_h’, ‘sc_w’, ‘talk_time’, ‘three_g’,’touch_screen’, ‘wifi’

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

#Dependencies
import numpy as np
import pandas as pd

#dataset import
dataset = pd.read_csv(‘data/train.csv’) #You need to change #directory accordingly
dataset.head(10) #Return 10 rows of data

دیتاست ما شبیه این است:

#Changing pandas dataframe to numpy array
X = dataset.iloc[:,:20].values
y = dataset.iloc[:,20:21].values

این قسمت از کد، دوآرایه X و Y را ایجاد می کند،آرایه X شامل ویژگی‌ها و آرایه Y شامل کلاس‌ها(دسته‌ها) است.

#Normalizing the data
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit_transform(X)

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

آرایه X بعداز نرمال سازی به شکل زیر تغییر می کند:

Normalized data:
[-0.90259726    -0.9900495      0.83077942    -1.01918398    -0.76249466     -1.04396559
 -1.38064353     0.34073951     1.34924881    -1.10197128    -1.3057501      -1.40894856
 -1.14678403     0.39170341    -0.78498329     0.2831028      1.46249332     -1.78686097
 -1.00601811     0.98609664]

مرحله بعد استفاده از One Hot Encode برای کلاس‌ها است. کدکردن One Hot فرایندی است برای تبدیل کلاس‌ها از عدد صحیح به مقادیر باینری. مثالی را درنظر بگیرید که در دیتاست آن سه کلاس با نام‌های 1، 2و 3 وجود دارد. نمی‌توانیم بصورت مستیم این کلاس‌ها را به شبکه عصبی وارد کنیم، پس آنها را به این شکل تبدیل می کنیم:

1- 1 0 0

2- 0 1 0

3- 0 0 1

اکنون یک مقدار باینری یکتا برای هر کلاس وجود دارد. آرایه‌ی جدیدی که شکل می گیرد از نوع (n , تعدادکلاس) خواهد بود، n به معنی شماره نمونه در دیتاست خواهد بود. برای این کار می توانیم به سادگی از توابع sklearn به شکل زیر استفاده کنیم:

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
y = ohe.fit_transform(y).toarray()

اگر دیتاست ما شامل چهار (4) کلاس باشد، برچسب آرایه ما به شکل زیر خواهد بود.

One hot encoded array:
[[0.    1.    0.    0.]
[ 0.    0.    1.    0.]
[ 0.    0.    1.    0.]
[ 0.    0.    1.    0.]
[ 0.    1.    0.    0.]]

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

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

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.1)

این کد، دیتاست ما را به دو دسته آموزشی و آزمایشی تقسیم می کند. داده‌های آموزشی 90% و داده‌های آزمایشی 10% داده‌های نمونه را تشکیل می‌دهد. که مقدار درصد دسته بندی در آرگومان test_size قرار می گیرد.

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

ادامه دارد

یک دیدگاه بگذارید

آدرس ایمیل شما منتشر نخواهد شد.


*