Sử dụng trình phân loại CNN được đào tạo trước và áp dụng nó trên bộ dữ liệu hình ảnh khác


11

Làm thế nào bạn sẽ tối ưu hóa một đào tạo neural network trước để áp dụng nó cho một vấn đề riêng biệt? Bạn có thể thêm nhiều lớp hơn vào mô hình được đào tạo trước và kiểm tra nó trên tập dữ liệu của bạn không?

Ví dụ, nếu nhiệm vụ là sử dụng một CNN để phân loại nhóm giấy dán tường , tôi chắc chắn rằng nó sẽ không làm việc trực tiếp phân loại ra một pre-đào tạo mạng lưới đào tạo về hình ảnh mèo và chó, mặc dù cả hai đều là phân loại ảnh.

Câu trả lời:


15

Đỗ đọc - Khi Chuyển Learning là bất lợi (nhờ @media) (vẻ bề ngoài rất nhiều thông tin với tôi, vì vậy thêm ở đây để làm câu trả lời này một hoàn chỉnh ...)

Trả lời câu hỏi của bạn .. (bắt đầu từ đây)

Học chuyển là những gì bạn đang tìm kiếm ..

  • Khi chúng ta được giao một nhiệm vụ Deep Learning, một nhiệm vụ liên quan đến việc đào tạo Mạng thần kinh chuyển đổi (Covnet) trên bộ dữ liệu hình ảnh, bản năng đầu tiên của chúng ta sẽ là đào tạo mạng từ đầu. Tuy nhiên, trên thực tế, các mạng thần kinh sâu như Covnet có số lượng tham số khổng lồ, thường trong phạm vi hàng triệu. Việc huấn luyện Covnet trên một tập dữ liệu nhỏ (một số nhỏ hơn số lượng tham số) ảnh hưởng lớn đến khả năng khái quát của Covnet, thường dẫn đến tình trạng thừa.

  • Do đó, thường xuyên hơn trong thực tế, người ta sẽ tinh chỉnh các mạng hiện có được đào tạo trên một tập dữ liệu lớn như ImageNet (hình ảnh được dán nhãn 1,2M) bằng cách tiếp tục đào tạo nó (tức là chạy lan truyền ngược) trên tập dữ liệu nhỏ hơn mà chúng ta có. Với điều kiện là tập dữ liệu của chúng tôi không khác biệt nhiều về ngữ cảnh so với tập dữ liệu gốc (ví dụ ImageNet), mô hình được đào tạo trước sẽ có các tính năng liên quan đến vấn đề phân loại của chúng tôi.

Khi nào tinh chỉnh Mô hình?

  • Nói chung, nếu tập dữ liệu của chúng tôi không khác biệt nhiều về ngữ cảnh so với tập dữ liệu mà mô hình được đào tạo trước được đào tạo, chúng ta nên điều chỉnh. Mạng được đào tạo trước trên một tập dữ liệu lớn và đa dạng như ImageNet nắm bắt các tính năng phổ biến như đường cong và cạnh trong các lớp đầu của nó, có liên quan và hữu ích cho hầu hết các vấn đề phân loại.

  • Tất nhiên, nếu tập dữ liệu của chúng tôi đại diện cho một số miền rất cụ thể, ví dụ như hình ảnh y tế hoặc ký tự viết tay của Trung Quốc và không tìm thấy mạng nào được đào tạo trước về tên miền đó, thì chúng ta nên xem xét đào tạo mạng từ đầu.

  • Một mối quan tâm khác là nếu tập dữ liệu của chúng tôi nhỏ, việc tinh chỉnh mạng được đào tạo trước trên một tập dữ liệu nhỏ có thể dẫn đến quá mức, đặc biệt là nếu một vài lớp cuối của mạng là các lớp được kết nối đầy đủ, như trong trường hợp của mạng VGG. Phát biểu từ kinh nghiệm của tôi, nếu chúng tôi có một vài nghìn mẫu thô, với các chiến lược gia tăng dữ liệu phổ biến được thực hiện (dịch, xoay, lật, v.v.), việc tinh chỉnh thường sẽ giúp chúng tôi có kết quả tốt hơn.

  • Nếu tập dữ liệu của chúng tôi thực sự nhỏ, giả sử ít hơn một nghìn mẫu, cách tiếp cận tốt hơn là lấy đầu ra của lớp trung gian trước các lớp được kết nối đầy đủ làm tính năng (tính năng thắt cổ chai) và huấn luyện bộ phân loại tuyến tính (ví dụ: SVM) nó SVM đặc biệt giỏi trong việc vẽ ranh giới quyết định trên một tập dữ liệu nhỏ.

Kỹ thuật tinh chỉnh

Dưới đây là một số hướng dẫn chung để thực hiện tinh chỉnh:

  • Thực tiễn phổ biến là cắt bớt lớp cuối cùng (lớp softmax) của mạng được đào tạo trước và thay thế nó bằng lớp softmax mới có liên quan đến vấn đề của chúng ta. Ví dụ: mạng được đào tạo trước trên ImageNet đi kèm với lớp softmax với 1000 danh mục.

  • Nếu nhiệm vụ của chúng tôi là phân loại trên 10 danh mục, lớp softmax mới của mạng sẽ có 10 danh mục thay vì 1000 danh mục. Sau đó chúng tôi chạy lại tuyên truyền trên mạng để tinh chỉnh các trọng số được đào tạo trước. Đảm bảo xác thực chéo được thực hiện để mạng có thể tổng quát hóa tốt.

  • Sử dụng tỷ lệ học tập nhỏ hơn để đào tạo mạng. Vì chúng tôi hy vọng các trọng số được đào tạo trước đã khá tốt so với các trọng số được khởi tạo ngẫu nhiên, chúng tôi không muốn làm biến dạng chúng quá nhanh và quá nhiều. Một thực tế phổ biến là làm cho tỷ lệ học tập ban đầu nhỏ hơn 10 lần so với tốc độ được sử dụng cho đào tạo đầu.

  • Nó cũng là một thực tế phổ biến để đóng băng các trọng số của một vài lớp đầu tiên của mạng được đào tạo trước. Điều này là do một vài lớp đầu tiên nắm bắt các tính năng phổ quát như đường cong và cạnh cũng có liên quan đến vấn đề mới của chúng tôi. Chúng tôi muốn giữ những trọng lượng đó nguyên vẹn. Thay vào đó, chúng tôi sẽ khiến mạng tập trung vào việc học các tính năng cụ thể của tập dữ liệu trong các lớp tiếp theo.

Bạn cần phải huấn luyện chúng một lần nữa trong trường hợp này vì nếu tôi không sai thì hình nền không phải là một lớp các mô hình Image-net .. Sẽ không khó để xây dựng một mô hình từ đầu để làm như vậy (tốt nhất là sẽ nông hơn cũng làm ở đây ..)

Nguồn câu trả lời của tôi là bản dịch từ các khóa học tuyệt vời này ..

Để đọc thêm,


Nếu bạn chỉ thực hiện trích xuất tính năng, như không tinh chỉnh bất kỳ lớp nào. Có một lý do để thay thế lớp dày đặc cuối cùng bằng một phân loại tuyến tính? Tại sao không giữ nó như một lớp dày đặc mới, và chỉ cần giữ lại trong khi giữ cho tất cả các lớp dưới cùng bị đóng băng? Có phải chỉ vì đào tạo một phân loại tuyến tính sẽ nhanh hơn đào tạo một lớp dày đặc mới?
CMCDragonkai

1
Để trích xuất tính năng, không cần nối thêm lớp nhưng một số lớp như thay đổi kích thước Pooling và Shape được nối để phù hợp với độ mờ và có thể giảm các giá trị trung gian; Chắc chắn việc đào tạo một mô hình tuyến tính nhanh hơn NN nhưng bạn có thể thử cả hai và xem những gì hoạt động tốt nhất cho trường hợp sử dụng của bạn; Giải phóng lớp dày đặc cuối cùng và đào tạo lại với một vài lớp bổ sung để phù hợp với vấn đề của bạn trong tay là một cách phổ biến
Aditya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.