شروع سریع TensorFlow 2 برای مبتدیان

مشاهده در TensorFlow.org در Google Colab اجرا شود مشاهده منبع در GitHub دانلود دفترچه یادداشت

این مقدمه کوتاه از Keras برای موارد زیر استفاده می کند:

  1. یک مجموعه داده از پیش ساخته شده را بارگیری کنید.
  2. یک مدل یادگیری ماشین شبکه عصبی بسازید که تصاویر را طبقه بندی می کند.
  3. این شبکه عصبی را آموزش دهید.
  4. دقت مدل را ارزیابی کنید.

این آموزش یک نوت بوک Google Collaboratory است. برنامه‌های پایتون مستقیماً در مرورگر اجرا می‌شوند – راهی عالی برای یادگیری و استفاده از TensorFlow. برای دنبال کردن این آموزش، نوت بوک را در Google Colab با کلیک بر روی دکمه بالای این صفحه اجرا کنید.

  1. در Colab، به زمان اجرا پایتون متصل شوید: در سمت راست بالای نوار منو، CONNECT را انتخاب کنید.
  2. اجرای تمام سلول های کد نوت بوک: زمان اجرا > اجرای همه را انتخاب کنید.

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 مراجعه کنید.