Google I / O là một kết quả hoàn hảo! Cập nhật các phiên TensorFlow Xem phiên

Khởi động nhanh TensorFlow 2 cho người mới bắt đầu

Xem trên TensorFlow.org Chạy trong Google Colab Xem nguồn trên GitHub Tải xuống sổ ghi chép

Phần giới thiệu ngắn này sử dụng Keras để:

  1. Tải một tập dữ liệu được tạo sẵn.
  2. Xây dựng mô hình học máy mạng thần kinh phân loại hình ảnh.
  3. Đào tạo mạng nơ-ron này.
  4. Đánh giá độ chính xác của mô hình.

Hướng dẫn này là một sổ ghi chép của Google Colaboratory . Các chương trình Python được chạy trực tiếp trong trình duyệt — một cách tuyệt vời để học và sử dụng TensorFlow. Để làm theo hướng dẫn này, hãy chạy sổ ghi chép trong Google Colab bằng cách nhấp vào nút ở đầu trang này.

  1. Trong Colab, kết nối với thời gian chạy Python: Ở trên cùng bên phải của thanh menu, chọn KẾT NỐI .
  2. Chạy tất cả các ô mã sổ ghi chép: Chọn Thời gian chạy > Chạy tất cả .

Thiết lập TensorFlow

Nhập TensorFlow vào chương trình của bạn để bắt đầu:

import tensorflow as tf
print("TensorFlow version:", tf.__version__)
TensorFlow version: 2.8.0-rc1

Nếu bạn đang theo dõi trong môi trường phát triển của riêng mình, thay vì Colab , hãy xem hướng dẫn cài đặt để thiết lập TensorFlow để phát triển.

Tải tập dữ liệu

Tải và chuẩn bị tập dữ liệu MNIST . Chuyển đổi dữ liệu mẫu từ số nguyên sang số dấu phẩy động:

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

Xây dựng mô hình học máy

Xây dựng mô hình tf.keras.Sequential bằng cách xếp chồng các lớp.

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)
])

Đối với mỗi ví dụ, mô hình trả về một vectơ của logits hoặc log tỉ lệ cược , một cho mỗi lớp.

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)

Hàm tf.nn.softmax chuyển đổi các bản ghi này thành xác suất cho mỗi lớp:

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)

Định nghĩa một hàm tổn thất để huấn luyện bằng cách sử dụng losses.SparseCategoricalCrossentropy , lấy một vectơ logits và một chỉ số True và trả về một tổn thất vô hướng cho mỗi ví dụ.

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

Tổn thất này bằng với xác suất log âm của lớp đúng: Tổn thất bằng 0 nếu mô hình chắc chắn là đúng lớp.

Mô hình chưa được đào tạo này cho xác suất gần với ngẫu nhiên (1/10 cho mỗi lớp), do đó, tổn thất ban đầu phải gần với -tf.math.log(1/10) ~= 2.3 .

loss_fn(y_train[:1], predictions).numpy()
1.8534881

Trước khi bạn bắt đầu đào tạo, hãy cấu hình và biên dịch mô hình bằng Keras Model.compile . Đặt lớp trình optimizer thành adam , đặt loss cho hàm loss_fn mà bạn đã xác định trước đó và chỉ định số liệu được đánh giá cho mô hình bằng cách đặt thông metrics thành accuracy .

model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])

Đào tạo và đánh giá mô hình của bạn

Sử dụng phương thức Model.fit để điều chỉnh các thông số mô hình của bạn và giảm thiểu tổn thất:

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>

Phương pháp Model.evaluate kiểm tra hiệu suất của mô hình, thường là trên " Bộ xác thực " hoặc " Bộ thử nghiệm ".

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]

Bộ phân loại hình ảnh hiện đã được đào tạo để có độ chính xác ~ 98% trên tập dữ liệu này. Để tìm hiểu thêm, hãy đọc hướng dẫn về TensorFlow .

Nếu bạn muốn mô hình của mình trả về một xác suất, bạn có thể bọc mô hình được đào tạo và gắn softmax vào đó:

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)>

Sự kết luận

Xin chúc mừng! Bạn đã đào tạo một mô hình học máy bằng cách sử dụng tập dữ liệu dựng sẵn bằng API Keras .

Để biết thêm các ví dụ về cách sử dụng Keras, hãy xem các hướng dẫn . Để tìm hiểu thêm về cách xây dựng mô hình với Keras, hãy đọc hướng dẫn . Nếu bạn muốn tìm hiểu thêm về cách tải và chuẩn bị dữ liệu, hãy xem hướng dẫn về tải dữ liệu hình ảnh hoặc tải dữ liệu CSV .