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

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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 .