مراحل ایجاد یک مدل یادگیری عمیق با Keras (قسمت پایانی)
مراحل ایجاد یک مدل یادگیری عمیق با Keras (قسمت پایانی)
4-مدل Fit Keras
ما مدل خود را تعریف کرده و برای محاسبه کارآمد آماده کرده ایم.اکنون زمان اجرای مدل بر روی برخی داده ها فرا رسیده است.ما می توانیم مدل خود را با فراخوانی تابع fit () بر روی مدلبر روی داده های بارگذاری شده آموزش دهیم یا برازش دهیم.آموزش در دوره های مختلف اتفاق می افتد و هر دوره به دسته تقسیم می شود.
دوره(epoch): یک گذر از همه ردیف های مجموعه داده آموزش.
دسته ای(batch): یک یا چند نمونه قبل از به روزرسانی وزن ها توسط مدل در یک دوره در نظر گرفته شده است.
یک دوره شامل یک یا چند دسته ، بر اساس اندازه دسته انتخاب شده و مدل مناسب برای بسیاری از دوره ها است.
تفاوت بین یک دسته و یک دوره در یک شبکه عصبی چیست؟
فرآیند آموزش برای تعداد ثابت تکرار از طریق مجموعه داده ای به نام epochs اجرا می شود که باید با استفاده از آرگومان epochs مشخص کنیم. ما همچنین باید تعداد ردیف های مجموعه داده ای را که قبل از به روزرسانی وزن مدل در هر دوره در نظر گرفته می شوند ، تعیین کنیم که اندازه دسته ای نامیده می شود و با استفاده از آرگومان batch_size تنظیم می شود.برای این مشکل ، ما تعداد کمی از دوره ها (150) را اجرا می کنیم و ازدسته ای نسبتاً کوچک به اندازه 10 استفاده می کنیم.این پیکربندی ها را می توان به صورت آزمایشی با آزمون و خطا انتخاب کرد.ما می خواهیم مدل را به اندازه کافی آموزش دهیم تا بتواند نگاشت خوب (یا به اندازه کافی خوب) ردیف داده های ورودی را در طبقه بندی خروجی بیاموزد. این مدل همیشه دارای خطا خواهد بوداما مقدار خطا پس از مدتی برای پیکربندی مدل معین ، یکسان می شود. به این همگرایی مدل می گویند.
...
# fit the keras model on the dataset
model.fit(X, y, epochs=150, batch_size=10)
...
اینجاست که کار روی CPU یا GPU شما اتفاق می افتد.
- ارزیابی مدل Keras :
ما شبکه عصبی خود را بر روی کل مجموعه داده آموزش داده ایم و می توانیم عملکرد شبکه را در همان مجموعه داده ارزیابی کنیم.این فقط به ما این ایده را می دهد که چگونه مجموعه داده را به خوبی مدل کرده ایم (به عنوان مثال دقت قطار) ، اما هیچ ایده ای در مورد اینکه الگوریتم چگونه می تواند بر روی داده های جدید عملکرد خوبی داشته باشد ، ارائه نمی دهد. ما این کاررا برای سادگی انجام داده ایم ، اما در حالت ایده آل ، شما می توانید داده های خود را به مجموعه داده های آموزش و آزمایش برای آموزش و ارزیابی مدل خود تفکیک کنید.شما می توانید مدل خود را بر روی مجموعه داده آموزشی خود با استفاده از تابع ارزیابی () در مدل خود ارزیابی کنید و همان ورودی و خروجی مورد استفاده برای آموزش مدل را به آن منتقل کنید.این یک پیش بینی برای هر جفت ورودی و خروجی ایجاد می کند و نمرات را جمع آوری می کند ، از جمله میانگین ضرر و معیارهایی که پیکربندی کرده اید ، مانند دقت.تابع ارزیابی () لیستی با دو مقدار باز می گرداند. اولین مورد از بین رفتن مدل در مجموعه داده و دومی دقت مدل در مجموعه داده است. ما فقط علاقه مند به گزارش صحت هستیم ،بنابراین مقدار ضرر را نادیده می گیریم.
... # evaluate the keras model _, accuracy = model.evaluate(X, y) print('Accuracy: %.2f' % (accuracy*100)) همه را با هم گره بزنید
شما به تازگی مشاهده کرده اید که چگونه می توانید به راحتی اولین مدل شبکه عصبی خود را در Keras ایجاد کنید.
بیایید همه را با هم به یک مثال کامل کد متصل کنیم.
# first neural network with keras tutorial 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-diabet.csv” ذخیره کنید. سپس می توانید فایل پایتونرا به عنوان یک اسکریپت از خط فرمان خود (خط فرمان) به شرح زیر اجرا کنید:
python keras_first_network.py
با اجرای این مثال ، باید پیامی را برای هر یک از 150 دوره چاپ شده از دست رفته و دقت مشاهده کنید ، و سپس ارزیابی نهایی مدل آموزش داده شده در مجموعه داده آموزش را مشاهده کنید.حدود 10 ثانیه طول می کشد تا در ایستگاه کاری من روی CPU اجرا شود.در حالت ایده آل ، ما دوست داریم ضرر به صفر و دقت به 1.0 (به عنوان مثال 100) برسد. این برای هیچ مشکل جز بی اهمیت ترین مشکلات یادگیری ماشین امکان پذیر نیست.در عوض ، ما همیشه در مدل خود خطایی خواهیم داشت. هدف این است که پیکربندی مدل و پیکربندی آموزشی را انتخاب کنید که به کمترین ضرر و بالاترین دقت ممکن برای یک مجموعه داده معین برسد.
... 768/768 [==============================] - 0s 63us/step - loss: 0.4817 - acc: 0.7708 Epoch 147/150 768/768 [==============================] - 0s 63us/step - loss: 0.4764 - acc: 0.7747 Epoch 148/150 768/768 [==============================] - 0s 63us/step - loss: 0.4737 - acc: 0.7682 Epoch 149/150 768/768 [==============================] - 0s 64us/step - loss: 0.4730 - acc: 0.7747 Epoch 150/150 768/768 [==============================] - 0s 63us/step - loss: 0.4754 - acc: 0.7799 768/768 [==============================] - 0s 38us/step Accuracy: 76.56
توجه داشته باشید ، اگر سعی کنید این مثال را در نوت بوک IPython یا Jupyter اجرا کنید ممکن است خطایی دریافت کنید.
دلیل آن میله های پیشرفت خروجی در طول آموزش است. شما می توانید به راحتی این تنظیمات را با تنظیم verbose = 0 در فراخوانی fit () و () ارزیابی کنید () ، به عنوان مثال:
... # fit the keras model on the dataset without progress bars model.fit(X, y, epochs=150, batch_size=10, verbose=0) # evaluate the keras model _, accuracy = model.evaluate(X, y, verbose=0) ...
توجه: نتایج شما ممکن است با توجه به تصادفی بودن الگوریتم یا روش ارزیابی یا تفاوت در دقت عددی متفاوت باشد. مثال را چند بار اجرا کنید و میانگین نتیجه را مقایسه کنید.
چه مقدارعددی گرفتید؟
نتایج خود را در نظرات زیر ارسال کنید.شبکه های عصبی یک الگوریتم تصادفی هستند ، بدین معنی که الگوریتم یکسان بر روی داده های یکسان می تواند هر بار که کد اجرا می شود ، مدل متفاوتی را با مهارت های مختلف آموزش دهد. این یک ویژگی است ، نه یک اشکال. در این مورد می توانید در پست بیشتر بدانید:
واریانس عملکرد مدل بدین معناست که برای بدست آوردن تقریبی معقول از عملکرد مطلوب مدل خود ، ممکن است لازم باشد بارها آن را برآورد کرده و میانگین نمرات دقت را محاسبه کنید. برای اطلاعات بیشتر در مورد این روش ارزیابی شبکه های عصبی ، پست را مشاهده کنید:
به عنوان مثال ، در زیر نمرات دقت حاصل از اجرای مجدد مثال 5 بار آورده شده است:
Accuracy: 75.00 Accuracy: 77.73 Accuracy: 77.60 Accuracy: 78.12 Accuracy: 76.17
می بینیم که همه نمرات دقت در حدود 77 و میانگین 76.924 است.
- 7. پیش بینی کنید
اولین سوالی که از من می پرسند این است:
پس از آموزش مدل خود ، چگونه می توانم از آن برای پیش بینی داده های جدید استفاده کنم؟
سوال عالی.
ما می توانیم مثال فوق را تطبیق دهیم و از آن برای ایجاد پیش بینی در مجموعه داده آموزشی استفاده کنیم ، وانمود کنیم که یک مجموعه داده جدید است که قبلاً ندیده ایم.انجام پیش بینی ها به سادگی فراخوانی تابع () predict بر روی مدل است. ما از یک تابع فعال سازی سیگموئید در لایه خروجی استفاده می کنیم ، بنابراین پیش بینی ها یک احتمال در محدوده 0 تا 1 خواهند بود. ما می توانیم آنها را به راحتی با گرد کردن آنها به یک پیش بینی دودویی واضح برای این کار طبقه بندی تبدیل کنیم.
برای مثال :
... # make probability predictions with the model predictions = model.predict(X) # round predictions rounded = [round(x[0]) for x in predictions]
متناوباً ، ما می توانیم تابع predict_classes را بر روی مدل فراخوانی کنیم تا مستقیماً کلاس های مشخص را پیش بینی کنیم ، به عنوان مثال:
... # make class predictions with the model predictions = model.predict_classes(X) مثال کامل زیر برای هر نمونه در مجموعه داده پیش بینی می کند ، سپس داده های ورودی ، کلاس پیش بینی شده و کلاس مورد انتظار را برای 5 مثال اول در مجموعه داده چاپ می کند.
# first neural network with keras make predictions 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, verbose=0) # make class predictions with the model predictions = model.predict_classes(X) # summarize the first 5 cases for i in range(5): print('%s => %d (expected %d)' % (X[i].tolist(), predictions[i], y[i]))
اجرای مثال ، نوار پیشرفت را مانند قبل نشان نمی دهد ، زیرا آرگومان مفصل را روی 0 تنظیم کرده ایم.
پس از تناسب مدل ، پیش بینی هایی برای همه نمونه های مجموعه داده انجام می شود و سطرهای ورودی و مقدار کلاس پیش بینی شده برای 5 مثال اول چاپ شده و با مقدار کلاس موردانتظار مقایسه می شود. می بینیم که اکثر سطرها به درستی پیش بینی شده اند. در واقع ، ما انتظار داریم که 76.9 درصد از سطرها بر اساس عملکرد تخمینی مدل در قسمت قبل بهدرستی پیش بینی شوند.
[6.0, 148.0, 72.0, 35.0, 0.0, 33.6, 0.627, 50.0] => 0 (expected 1) [1.0, 85.0, 66.0, 29.0, 0.0, 26.6, 0.351, 31.0] => 0 (expected 0) [8.0, 183.0, 64.0, 0.0, 0.0, 23.3, 0.672, 32.0] => 1 (expected 1) [1.0, 89.0, 66.0, 23.0, 94.0, 28.1, 0.167, 21.0] => 0 (expected 0) [0.0, 137.0, 40.0, 35.0, 168.0, 43.1, 2.288, 33.0] => 1 (expected 1)
دیدگاهتان را بنویسید