Giúp bảo vệ Great Barrier Reef với TensorFlow trên Kaggle Tham Challenge

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 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.6.0

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
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step
11501568/11490434 [==============================] - 0s 0us/step

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.74148655, -0.39261633,  0.08016336, -0.46431944,  0.21458861,
         0.31183302,  0.7555975 ,  0.80728006, -0.6296631 , -0.4926056 ]],
      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.16651046, 0.05356818, 0.08594736, 0.04986165, 0.09831339,
        0.10835411, 0.16887674, 0.1778342 , 0.04226285, 0.04847102]],
      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()
2.2223506

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 [==============================] - 3s 2ms/step - loss: 0.2956 - accuracy: 0.9137
Epoch 2/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1430 - accuracy: 0.9572
Epoch 3/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1059 - accuracy: 0.9682
Epoch 4/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0870 - accuracy: 0.9736
Epoch 5/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0732 - accuracy: 0.9774
<keras.callbacks.History at 0x7fabfe6f6cd0>

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 - 0s - loss: 0.0771 - accuracy: 0.9756
[0.07707860320806503, 0.975600004196167]

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([[9.35628634e-07, 1.90160367e-08, 2.08603578e-05, 3.36712168e-04,
        3.99928729e-10, 3.29815066e-07, 1.11730861e-12, 9.99547541e-01,
        5.78590800e-07, 9.29015441e-05],
       [9.06768847e-08, 1.75887300e-03, 9.98239040e-01, 1.42416525e-06,
        2.24498985e-14, 1.93019602e-07, 4.19461571e-07, 1.78353019e-14,
        1.09490275e-08, 3.30677152e-15],
       [1.80358853e-07, 9.99705374e-01, 4.36524460e-05, 7.87066620e-06,
        6.60410151e-05, 1.29832119e-06, 2.66996949e-06, 5.51502962e-05,
        1.15344104e-04, 2.45894512e-06],
       [9.99937892e-01, 1.82150364e-10, 2.67099913e-05, 1.87603248e-07,
        2.81131548e-07, 1.86480634e-06, 2.33697901e-05, 1.97653662e-07,
        3.29448504e-08, 9.38197445e-06],
       [1.53162068e-06, 2.57238808e-09, 2.05853598e-06, 2.75526531e-07,
        9.93477166e-01, 2.57349512e-07, 3.59538944e-06, 9.20545644e-05,
        1.77590653e-06, 6.42123120e-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 .