مشاهده در TensorFlow.org | در Google Colab اجرا شود | مشاهده منبع در GitHub | دانلود دفترچه یادداشت |
این مقدمه کوتاه از Keras برای موارد زیر استفاده می کند:
- یک مجموعه داده از پیش ساخته شده را بارگیری کنید.
- یک مدل یادگیری ماشین شبکه عصبی بسازید که تصاویر را طبقه بندی می کند.
- این شبکه عصبی را آموزش دهید.
- دقت مدل را ارزیابی کنید.
این آموزش یک نوت بوک Google Collaboratory است. برنامههای پایتون مستقیماً در مرورگر اجرا میشوند – راهی عالی برای یادگیری و استفاده از TensorFlow. برای دنبال کردن این آموزش، نوت بوک را در Google Colab با کلیک بر روی دکمه بالای این صفحه اجرا کنید.
- در Colab، به زمان اجرا پایتون متصل شوید: در سمت راست بالای نوار منو، CONNECT را انتخاب کنید.
- اجرای تمام سلول های کد نوت بوک: زمان اجرا > اجرای همه را انتخاب کنید.
TensorFlow را تنظیم کنید
برای شروع، TensorFlow را به برنامه خود وارد کنید:
import tensorflow as tf
print("TensorFlow version:", tf.__version__)
TensorFlow version: 2.8.0-rc1
اگر به جای Colab در محیط توسعه خود دنبال میکنید، راهنمای نصب را برای تنظیم TensorFlow برای توسعه ببینید.
یک مجموعه داده را بارگیری کنید
مجموعه داده MNIST را بارگیری و آماده کنید. داده های نمونه را از اعداد صحیح به اعداد ممیز شناور تبدیل کنید:
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
یک مدل یادگیری ماشین بسازید
با چیدن لایه ها یک مدل tf.keras.Sequential
.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10)
])
برای هر مثال، مدل یک بردار از logits یا log-odds امتیاز، یک برای هر کلاس برمی گرداند.
predictions = model(x_train[:1]).numpy()
predictions
array([[ 0.2760778 , -0.39324787, -0.17098302, 1.2016621 , -0.03416392, 0.5461229 , -0.7203061 , -0.41886678, -0.59480035, -0.7580608 ]], dtype=float32)
تابع tf.nn.softmax
این logit ها را برای هر کلاس به احتمالات تبدیل می کند:
tf.nn.softmax(predictions).numpy()
array([[0.11960829, 0.06124588, 0.0764901 , 0.30181262, 0.08770514, 0.15668967, 0.04416083, 0.05969675, 0.05006609, 0.04252464]], dtype=float32)
یک تابع ضرر برای آموزش با استفاده از losses تعریف کنید. losses.SparseCategoricalCrossentropy
، که یک بردار از logit ها و یک شاخص True
می گیرد و برای هر مثال یک ضرر اسکالر برمی گرداند.
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
این ضرر برابر با احتمال لگ منفی کلاس واقعی است: اگر مدل از کلاس صحیح مطمئن باشد ضرر صفر است.
این مدل آموزش ندیده احتمالاتی نزدیک به تصادفی (1/10 برای هر کلاس) می دهد، بنابراین ضرر اولیه باید نزدیک به -tf.math.log(1/10) ~= 2.3
باشد.
loss_fn(y_train[:1], predictions).numpy()
1.8534881
قبل از شروع آموزش، مدل را با استفاده از Keras Model.compile
پیکربندی و کامپایل کنید. کلاس optimizer
را روی adam
تنظیم کنید، loss
را روی تابع loss_fn
که قبلاً تعریف کردید تنظیم کنید، و با تنظیم پارامتر metrics
روی accuracy
، معیاری را برای ارزیابی مدل مشخص کنید.
model.compile(optimizer='adam',
loss=loss_fn,
metrics=['accuracy'])
مدل خود را آموزش دهید و ارزیابی کنید
از روش Model.fit
برای تنظیم پارامترهای مدل خود و به حداقل رساندن ضرر استفاده کنید:
model.fit(x_train, y_train, epochs=5)
Epoch 1/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.2950 - accuracy: 0.9143 Epoch 2/5 1875/1875 [==============================] - 3s 2ms/step - loss: 0.1451 - accuracy: 0.9567 Epoch 3/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.1080 - accuracy: 0.9668 Epoch 4/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.0906 - accuracy: 0.9717 Epoch 5/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.0749 - accuracy: 0.9761 <keras.callbacks.History at 0x7f062c606850>
روش Model.evaluate
عملکرد مدلها را معمولاً در یک " Validation-set " یا " Test-set " بررسی میکند.
model.evaluate(x_test, y_test, verbose=2)
313/313 - 1s - loss: 0.0783 - accuracy: 0.9755 - 588ms/epoch - 2ms/step [0.07825208455324173, 0.9754999876022339]
طبقهبندی کننده تصویر اکنون با دقت 98% در این مجموعه داده آموزش داده شده است. برای کسب اطلاعات بیشتر، آموزش های TensorFlow را بخوانید.
اگر می خواهید مدل شما یک احتمال را برگرداند، می توانید مدل آموزش دیده را بپیچید و softmax را به آن وصل کنید:
probability_model = tf.keras.Sequential([
model,
tf.keras.layers.Softmax()
])
probability_model(x_test[:5])
<tf.Tensor: shape=(5, 10), dtype=float32, numpy= array([[2.72807270e-08, 2.42517650e-08, 7.75602894e-06, 1.28684027e-04, 7.66215633e-11, 3.54162950e-07, 3.04894151e-14, 9.99857187e-01, 2.32766553e-08, 5.97762892e-06], [7.37396704e-08, 4.73638036e-04, 9.99523997e-01, 7.20633352e-07, 4.54133671e-17, 1.42298268e-06, 5.96959016e-09, 1.23534145e-13, 7.77225608e-08, 6.98619169e-16], [1.95462448e-07, 9.99295831e-01, 1.02249986e-04, 1.86699708e-05, 5.65737491e-06, 1.12115902e-06, 5.32719559e-06, 5.22767776e-04, 4.79981136e-05, 1.76624681e-07], [9.99649286e-01, 1.80224735e-09, 3.73612856e-05, 1.52324446e-07, 1.30824594e-06, 2.82781020e-05, 6.99703523e-05, 3.30940424e-07, 2.13184350e-07, 2.13106396e-04], [1.53770895e-06, 1.72272063e-08, 1.98980865e-06, 3.97882580e-08, 9.97192323e-01, 1.10544443e-05, 1.54713348e-06, 2.81727880e-05, 3.48721733e-06, 2.75991508e-03]], dtype=float32)>
نتیجه
تبریک می گویم! شما یک مدل یادگیری ماشین را با استفاده از مجموعه داده از پیش ساخته شده با استفاده از Keras API آموزش داده اید.
برای مثالهای بیشتر از استفاده از Keras، آموزشها را بررسی کنید. برای کسب اطلاعات بیشتر در مورد مدل های ساختمانی با Keras، راهنماها را بخوانید. اگر میخواهید درباره بارگیری و آمادهسازی دادهها اطلاعات بیشتری کسب کنید، به آموزشهای بارگیری دادههای تصویر یا بارگیری دادههای CSV مراجعه کنید.