برای اجرای این مبحث نیاز به نصب کتابخانه کراس (Keras) دارید. برای نصب این کتابخانه میتوانید لینک زیر را مطالعه کنید.
http://blog.class.vision/1396/12/installing-keras-with-tensorflow-backend/
1 2 3 4 5 6 |
import keras from keras.models import Sequential from keras.layers import Dense, Dropout, Activation import numpy as np from dataset import load_hoda |
1 |
np.random.seed(123) # for reproducibility |
لود مجموعه داده (dataset)
1 |
x_train_original, y_train_original, x_test_original, y_test_original = load_hoda() |
پیشپردازش دادهها برای Keras
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def print_data_info(x_train, y_train, x_test, y_test): #Check data Type print ("\ttype(x_train): {}".format(type(x_train))) print ("\ttype(y_train): {}".format(type(y_train))) #check data Shape print ("\tx_train.shape: {}".format(np.shape(x_train))) print ("\ty_train.shape: {}".format(np.shape(y_train))) print ("\tx_test.shape: {}".format(np.shape(x_test))) print ("\ty_test.shape: {}".format(np.shape(y_test))) #sample data print ("\ty_train[0]: {}".format(y_train[0])) |
ابتدا تابعی ساده تعریف کرده ایم که ابعاد، نوع داده ای و اطلاعات دیتاست لود شده را چاپ کند.
این اطلاعات را قبل و بعد از پیشپردازش داده ها چاپ خواهیم کرد تا متوجه تغییرات بشویم!
حال برای تبدیل فورمت دیتاها به فورمت کتابخانه ی کرا س باید یک سری پیش پردازش انجام بدهیم:
1 2 3 4 5 |
# Preprocess input data for Keras. x_train = np.array(x_train_original) y_train = keras.utils.to_categorical(y_train_original, num_classes=10) x_test = np.array(x_test_original) y_test = keras.utils.to_categorical(y_test_original, num_classes=10) |
x_train و x_test به فرمت لیست ساده است به همین دلیل ما ان ها را به کمک np.array به فرمت آرایههای نامپای یا ndarray تبدیل کردیم و y_train و y_test نیزبه فرمت لیست ساده هستند که ما باتابع keras.utils.to_categorical به شکل یک وکتور در نظر میگیریم که درهرخانه اش یک برچسپ 10تایی است که بسته به مقدار y_train و y_test ان لیبل یک وبقیه خانه ها صفر هستند به اصطلاح one-hot-encoding می گویند.
1 2 3 4 |
print("Before Preprocessing:") print_data_info(x_train_original, y_train_original, x_test_original, y_test_original) print("After Preprocessing:") print_data_info(x_train, y_train, x_test, y_test) |
با فراخوانی تابع ساده ای که قبلاتعریف کردیم میتوانیم ابعاد، نوع داده ای و اطلاعات دیتاست لود شده قبل وبعد از processرا چاپ کنیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Before Preprocessing: type(x_train): <class 'list'> type(y_train): <class 'numpy.ndarray'> x_train.shape: (1000, 25) y_train.shape: (1000,) x_test.shape: (200, 25) y_test.shape: (200,) y_train[0]: 6 After Preprocessing: type(x_train): <class 'numpy.ndarray'> type(y_train): <class 'numpy.ndarray'> x_train.shape: (1000, 25) y_train.shape: (1000, 10) x_test.shape: (200, 25) y_test.shape: (200, 10) y_train[0]: [ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.] |
میبینیم که [y_train [0پیش از پردازش مقدار 6را داشته وبعداز پردازش به یک وکتور که برجسپ خانه ی 6 ام ان یک است تبدیل شده است.
1 2 3 4 |
x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 |
آخرین گام پیشپردازش تبدیل دادهها به float32 و چون دیتا ها بین مقادیر 0تا255هستند با تقسیم x_train و x_testمقادیر را به مقدار بین 0 و 1نرمال سازی میکنیم.
تعریف معماری مدل (model architecture)
1 2 3 |
model = Sequential() model.add(Dense(64, activation='relu', input_dim=25)) model.add(Dense(10, activation='softmax')) |
در شبکه عصبی معماری شبکه قبل از انجام هرکاری اهمیت بالایی دارد پس ابتدا ان را به صورت بالا پیاده سازی میکنیم.
خط اول کد : نوع modelخود را ()Sequential قرار میدهیم چون میخواهیم شبکه های عصبی مان به ترتیب پشت هم قرار بگیرند و غیر بازگشتی باشند(یعنی امکان بازگشت ازیک لایه نورون جلوتر به لایه نورون پیشین نباشد).
خط دوم کد:حال به modelتعریف شده یک لایه با تابع add اضافه میکنیم چون لایه اول را میخواهیم تعریف کنیم باید تعدادنورون ورودی وخروجی را مشخص کنیم.تابع داخلی که Denseهست میگوید این لایه هارا به هم بچسبان و64 که پارامتر اول تابع است تعداد نورون های خروجی رامشخص میکند پارامتر دوم رادر یادداشت های قبلی توضیح داده شده است و activation=’relu’قراردادیم و درنهایت input_dim نیز تعداد نورون های ورودی رامشخص میکند.
خط سوم کد:لایه دیگری تعریف کردیم که به لایه قبلی چسبیده وتعدادنورون های خروجی 10است وبرای نرمال سازی خروجی activation=’softmax’قراردادیم وشبکه عصبی را با سه لایه جمع کردیم.
Compile model
1 2 3 |
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) |
بعداز مشخص کردن معماری شبکه عصبی مان با دستورmodel.compileمدل ساخنه شده را کمپایل میکنیم این تابه از سه پارامتر تعیین شده که:
‘ loss= ‘ categorical_crossentropy:تابع هزینه ومعیار بد بودن شبکه را تعیین میکندو بهترین loss را انتخاب کردیم.
optimizer=’rmsprop’برای بهینه کردن تابع loss از optimizerاستفاده میکنیم.
metrics=[‘accuracy’]گزارشی که میدهیم را برمبنای accuracyقرارمیدهیم(قبلا metricرا دریادداشت های قبلی دوستان توضیح داده اند
شبکه های اجتماعی