Lưu ngày! Google I / O hoạt động trở lại từ ngày 18 đến 20 tháng 5 Đăng ký ngay
Trang này được dịch bởi Cloud Translation API.
Switch to English

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. Xây dựng mạng nơ-ron phân loại hình ảnh.
  2. Đào tạo mạng nơ-ron này.
  3. Và cuối cùng, đánh giá độ chính xác của mô hình.

Đây là tệp 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ả .

Tải xuống và cài đặt TensorFlow 2. Nhập TensorFlow vào chương trình của bạn:

import tensorflow as tf

Tải và chuẩn bị tập dữ liệu MNIST . Chuyển đổi các 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 tf.keras.Sequential bằng cách xếp chồng các lớp. Chọn một trình tối ưu hóa và chức năng mất để đào tạo:

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ơ điểm số " logits " hoặc " log-chênh lệch ", một cho mỗi lớp.

predictions = model(x_train[:1]).numpy()
predictions
array([[ 0.67086774, -0.25231966,  0.01695401, -0.20872438, -0.5840499 ,
         0.20415965, -0.07967779,  0.01230302,  0.2564202 ,  0.19890268]],
      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.18120685, 0.07198457, 0.09422877, 0.07519217, 0.05166196,
        0.11362814, 0.08554938, 0.09379152, 0.11972431, 0.11303235]],
      dtype=float32)

losses.SparseCategoricalCrossentropy mất một vector logits và chỉ số True và trả về 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: Nó bằng 0 nếu mô hình chắc chắn là lớp đúng.

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), vì vậy 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()
2.1748242
model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])

Phương thức Model.fit điều chỉnh các thông số mô hình để giảm thiểu tổn thất:

model.fit(x_train, y_train, epochs=5)
Epoch 1/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.4813 - accuracy: 0.8565
Epoch 2/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1533 - accuracy: 0.9553
Epoch 3/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1057 - accuracy: 0.9686
Epoch 4/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0908 - accuracy: 0.9721
Epoch 5/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0700 - accuracy: 0.9788
<tensorflow.python.keras.callbacks.History at 0x7f7c15df5358>

Phương thức Model.evaluate kiểm tra hiệu suất của mô hình, thường là trên " Validation-set " hoặc " Test-set ".

model.evaluate(x_test,  y_test, verbose=2)
313/313 - 0s - loss: 0.0748 - accuracy: 0.9758
[0.07476752996444702, 0.9757999777793884]

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([[7.78855878e-08, 6.61358468e-11, 6.59998250e-07, 1.59961201e-05,
        2.46321262e-11, 1.29930243e-07, 2.94833365e-14, 9.99982715e-01,
        4.22193658e-08, 4.47160573e-07],
       [4.33228813e-08, 1.27517624e-05, 9.99970555e-01, 1.60829786e-05,
        2.47642311e-16, 7.49611928e-09, 1.37607294e-08, 4.11349470e-12,
        6.27970280e-07, 9.24811917e-14],
       [2.03916397e-06, 9.99185383e-01, 1.84247561e-04, 1.05477593e-05,
        2.75765397e-05, 5.58228692e-07, 1.01305332e-05, 4.32787347e-04,
        1.45807702e-04, 8.87280294e-07],
       [9.99742925e-01, 5.94857603e-08, 8.63709865e-05, 1.54006088e-08,
        1.39324254e-06, 4.43872267e-07, 1.60094583e-04, 5.25048790e-07,
        8.63345750e-09, 8.21989215e-06],
       [5.87329941e-06, 3.34152190e-07, 3.92818802e-05, 3.36201609e-08,
        9.96013522e-01, 5.50971926e-08, 4.14997248e-06, 1.14215931e-04,
        2.20527431e-06, 3.82039533e-03]], dtype=float32)>