Tiếp nối bài trước về Transfer Learning, lúc này chúng ta cùng tìm hiểu về Fine Tuning.

Bạn đang xem: Fine tuning là gì

Mở đầu

Fine tuning : Thuật ngữ này rất có thể được dịch là “Tinh chỉnh” – là một quy trình sử dụng một mô hình mạng sẽ được huấn luyện và đào tạo cho một nhiệm vụ nhất định để triển khai một trách nhiệm tương tự. Sở dĩ cách giải thích này gồm phần tương đương Transfer Learning – bởi vì Fine Tuning là 1 trong kỹ thuật Transfer Learning mà lại ! Hãy cùng tìm hiểu xem ví dụ nó là cụ nào nhé.

Khi tế bào hình của người tiêu dùng đã hội tụ trên dữ liệu mới, bạn có thể cố ráng giải phóng toàn thể hoặc một phần của quy mô cơ sở và huấn luyện và giảng dạy lại toàn thể mô hình từ đầu đến cuối với tỷ lệ học tập vô cùng thấp.

Đây là bước cuối cùng tùy chọn hoàn toàn có thể mang lại cho mình những đổi mới gia tăng. Nó cũng rất có thể dẫn mang lại tình trạng overfitting – hãy lưu ý đến điều đó.

Điều đặc biệt quan trọng là chỉ thực hiện bước này sau khi mô hình với các lớp đông lạnh đã được huấn luyện để hội tụ. Nếu bạn trộn những lớp trainable được khởi tạo bỗng nhiên với các lớp trainable chứa các tính năng đang được giảng dạy trước, các lớp được khởi tạo đột nhiên sẽ gây ra các cập nhật gradient không hề nhỏ trong quá trình huấn luyện, điều này sẽ phá hủy các tính năng đã được huấn luyện trước của bạn.

Một vấn đề quan trọng đặc biệt nữa tà tà sử dụng xác suất học tập vô cùng thấp ở tiến trình này, cũng chính vì bạn đang huấn luyện một tế bào hình to hơn nhiều đối với trong vòng giảng dạy đầu tiên, trên một tập dữ liệu thường siêu nhỏ. Bởi vì đó, bạn có nguy hại bị overfitting rất cấp tốc nếu áp dụng những biện pháp cập nhật trọng lượng lớn. Ở đây, chúng ta chỉ ao ước đọc những trọng số được huấn luyện và đào tạo trước theo phong cách tăng dần.

Đây là phương pháp implement fine-tuning cục bộ mô hình cơ sở:

# Hủy đóng băng quy mô cơ sởbase_model.trainable = True# quan trọng đặc biệt là phải biên dịch lại tế bào hình của khách hàng sau lúc thực hiện ngẫu nhiên thay đổi nào đối với thuộc tính `trainable` của ngẫu nhiên lớp bên trong nào# Để các thay đổi của bạn được xem đếnmodel.compile(optimizer=keras.optimizers.Adam(1e-5), # tỉ trọng học khôn xiết thấp loss=keras.losses.BinaryCrossentropy(from_logits=True), metrics=)# Train. Cảnh giác để dừng lại trước lúc bị overfitmodel.fit(new_dataset, epochs=10, callbacks=..., validation_data=...)Lưu ý đặc trưng về compile() và trainable

Việc hotline compile() trên một tế bào hình có nghĩa là "đóng băng" hành động của quy mô đó. Điều này ý niệm rằng các giá trị ở trong tính trainable tại thời điểm mô hình được biên dịch đề xuất được bảo toàn trong suốt thời gian tồn tại của mô hình đó, cho tới khi quy trình biên dịch được hotline lại. Vì đó, nếu như khách hàng thay đổi bất kỳ giá trị rất có thể đào tạo nào, hãy bảo đảm an toàn gọi lại compile () trên tế bào hình của bạn để các đổi khác của bạn được xem đến.

Lưu ý đặc biệt quan trọng về lớp BatchNormalization

Nhiều mô hình hình hình ảnh chứa những lớp BatchNormalization. Lớp đó là một trường hợp đặc biệt trên các số lượng rất có thể tưởng tượng được. Dưới đấy là một số điều cần ghi nhớ.

BatchNormalization đựng 2 trọng lượng không thể huấn luyện được update trong quy trình đào tạo. Đây là các biến theo dõi giá trị trung bình và phương sai của những yếu tố đầu vào.Khi chúng ta đặt bn_layer.trainable = False, lớp BatchNormalization đang chạy ở chính sách suy luận cùng sẽ không update thống kê trung bình và phương không đúng của nó. Điều này sẽ không đúng với những lớp khác nói chung, vì khả năng tập tạ & cơ chế suy luận / đào tạo và giảng dạy là hai quan niệm trực giao. Nhưng lại cả nhì được lắp với nhau vào trường phù hợp của lớp BatchNormalization.Khi các bạn giải phóng một mô hình có chứa những lớp BatchNormalization để triển khai tinh chỉnh, bạn nên giữ các lớp BatchNormalization ở chế độ suy luận bằng cách chuyển training = False lúc gọi quy mô cơ sở. Trường hợp không, các bạn dạng cập nhật được áp dụng cho các trọng lượng ko thể huấn luyện và đào tạo sẽ thốt nhiên ngột hủy hoại những gì mà mô hình đã học tập được.

Bạn đã thấy mẫu này vận động trong lấy ví dụ end-to-end nghỉ ngơi cuối chỉ dẫn này.

Transfer learning & fine-tuning với cùng một vòng lặp đào tạo và giảng dạy tùy chỉnh

Nếu thay vị fit(), ai đang sử dụng vòng lặp đào tạo và giảng dạy cấp phải chăng của riêng rẽ mình, thì quy trình thao tác về cơ bản vẫn giữ nguyên. Bạn nên cẩn thận chỉ tính đến list model.trainable_weights lúc áp dụng update gradient:

# Khởi tạo mô hình cơ sởbase_model = keras.applications.Xception( weights='imagenet', input_shape=(150, 150, 3), include_top=False)# Đóng băng mô hình cơ sởbase_model.trainable = False# Khởi tạo ra một mô hình mới on top.inputs = keras.Input(shape=(150, 150, 3))x = base_model(inputs, training=False)x = keras.layers.GlobalAveragePooling2D()(x)outputs = keras.layers.Dense(1)(x)model = keras.Model(inputs, outputs)loss_fn = keras.losses.BinaryCrossentropy(from_logits=True)optimizer = keras.optimizers.Adam()# Lặp lại các lô của tập dữ liệu.for inputs, targets in new_dataset: # Mở GradientTape. With tf.GradientTape() as tape: # chuyến qua predictions = model(inputs) # đo lường giá trị tổn thất đến lô này. Loss_value = loss_fn(targets, predictions) # lấy gradients với độ bớt của trọng số *trainable*. Gradients = tape.gradient(loss_value, model.trainable_weights) # update trọng số của quy mô optimizer.apply_gradients(zip(gradients, model.trainable_weights))

Một ví dụ từ đầu đến cuối: tinh chỉnh quy mô phân các loại hình hình ảnh trên tập tài liệu mèo với chó

Để củng cố rất nhiều khái niệm này, hãy trả lời bạn qua một ví dụ cụ thể về học tập và điều khiển chuyển giao từ trên đầu đến cuối. Shop chúng tôi sẽ tải mô hình Xception, được giảng dạy trước trên ImageNet và sử dụng nó bên trên tập tài liệu phân một số loại Kaggle "mèo so với chó".

Lấy dữ liệu

Đầu tiên, hãy search nạp tập dữ liệu mèo cùng chó bằng TFDS. Nếu như khách hàng có tập tài liệu của riêng rẽ mình, tất cả thể bạn sẽ muốn áp dụng tiện ích tf.keras.preprocessing.image_dataset_from_directory để tạo các đối tượng người dùng tập tài liệu có nhãn tựa như từ một tập hợp những hình hình ảnh trên đĩa được lưu trữ vào những thư mục giành riêng cho lớp.

Học chuyển giao hữu ích tuyệt nhất khi làm việc với những tập dữ liệu rất nhỏ. Để giữ cho tập tài liệu của cửa hàng chúng tôi nhỏ, shop chúng tôi sẽ sử dụng 40% dữ liệu đào tạo lúc đầu (25.000 hình ảnh) để đào tạo, 10% để đúng đắn và 10% để kiểm tra.

import tensorflow_datasets as tfdstfds.disable_progress_bar()train_ds, validation_ds, test_ds = tfds.load( "cats_vs_dogs", # Reserve 10% for validation và 10% for chạy thử split=<"train<:40%>", "train<40%:50%>", "train<50%:60%>">, as_supervised=True, # Include labels)print("Number of training samples: %d" % tf.data.experimental.cardinality(train_ds))print("Number of validation samples: %d" % tf.data.experimental.cardinality(validation_ds))print("Number of kiểm tra samples: %d" % tf.data.experimental.cardinality(test_ds))Number of training samples: 9305Number of validation samples: 2326Number of kiểm tra samples: 2326Đây là 9 hình ảnh đầu tiên trong tập dữ liệu đào tạo và giảng dạy – như chúng ta có thể thấy, chúng đều sở hữu kích thước khác nhau.

import matplotlib.pyplot as pltplt.figure(figsize=(10, 10))for i, (image, label) in enumerate(train_ds.take(9)): ax = plt.subplot(3, 3, i + 1) plt.imshow(image) plt.title(int(label)) plt.axis("off")

*
*
*

Xây dựng một tế bào hình

Bây giờ họ hãy chế tạo một mô hình theo kế hoạch chi tiết đã lý giải trước đó.

Lưu ý rằng:

Thêm một tấm Rescaling để chia tỷ lệ các giá chỉ trị nguồn vào (ban đầu vào phạm vi <0, 255>) thành phạm vi <-1, 1>.Thêm một tấm Dropout trước lớp phân loại, để bao gồm quy hóa.Đảm bảo training = False khi gọi mô hình cơ sở, nhằm nó chạy ở chế độ suy luận, do đó thống kê batchnorm không được cập nhật ngay cả sau khi chúng tôi giải phóng quy mô cơ sở để fine-tuning.

Xem thêm: Diễn Viên Lý Thần (Diễn Viên), Lý Thần Bức Xúc Thông Tin Ruồng Bỏ Phạm Băng Băng

Quan trọng là, tuy vậy mô hình cơ sở trở nên rất có thể huấn luyện được, cơ mà nó vẫn đang làm việc ở chế độ suy luận vì bọn họ đã để training=False khi điện thoại tư vấn nó khi bọn họ xây dựng tế bào hình. Điều này có nghĩa là các lớp chuẩn chỉnh hóa sản phẩm loạt bên phía trong sẽ không cập nhật thống kê hàng loạt của chúng. Giả dụ họ làm vậy, họ sẽ hủy diệt các đại diện thay mặt mà mô hình đã học cho tới nay.

Kết bài

Trên đây chúng ta đã mày mò kỹ thuật Fine-tuning.Cảm ơn chúng ta đã giành thời hạn theo dõi.Thân ái !