Tôi đang chơi một chút với convnets. Cụ thể, tôi đang sử dụng bộ dữ liệu mèo-vs-dog kaggle bao gồm 25000 hình ảnh được dán nhãn là mèo hoặc chó (mỗi loại 12500).
Tôi đã quản lý để đạt được độ chính xác phân loại khoảng 85% trên bộ thử nghiệm của mình, tuy nhiên tôi đặt mục tiêu đạt được độ chính xác 90%.
Vấn đề chính của tôi là quá mức. Bằng cách nào đó, nó luôn luôn kết thúc xảy ra (thông thường sau kỷ nguyên 8-10). Kiến trúc mạng của tôi được lấy cảm hứng từ VGG-16, cụ thể hơn là hình ảnh của tôi được thay đổi kích thước thành , và sau đó tôi chạy:
Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool 1 64x64x32 (kernel size is 2, strides is 2)
Convolution 3 64x64x64 (kernel size is 3, strides is 1)
Convolution 4 64x64x64 (kernel size is 3, strides is 1)
Max pool 2 32x32x64 (kernel size is 2, strides is 2)
Convolution 5 16x16x128 (kernel size is 3, strides is 1)
Convolution 6 16x16x128 (kernel size is 3, strides is 1)
Max pool 3 8x8x128 (kernel size is 2, strides is 2)
Convolution 7 8x8x256 (kernel size is 3, strides is 1)
Max pool 4 4x4x256 (kernel size is 2, strides is 2)
Convolution 8 4x4x512 (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)
Tất cả các lớp ngoại trừ lớp cuối cùng có chức năng kích hoạt.
Lưu ý rằng tôi đã thử các kết hợp khác nhau (tôi bắt đầu với các kết hợp đơn giản hơn).
Ngoài ra, tôi đã tăng dữ liệu bằng cách phản chiếu các hình ảnh, để tổng cộng tôi có 50000 hình ảnh.
Ngoài ra, tôi đang chuẩn hóa hình ảnh bằng cách sử dụng chuẩn hóa tối đa tối thiểu, trong đó X là hình ảnh
Mã được viết theo dòng chảy và kích thước lô là 128.
Các lô dữ liệu đào tạo nhỏ kết thúc quá mức và có độ chính xác 100% trong khi dữ liệu xác nhận dường như ngừng học ở khoảng 84-85%.
Tôi cũng đã cố gắng tăng / giảm tỷ lệ bỏ học.
Trình tối ưu hóa đang được sử dụng là AdamOptimizer với tỷ lệ học tập là 0,0001
Hiện tại tôi đã chơi với vấn đề này trong 3 tuần qua và 85% dường như đã đặt ra một rào cản trước mặt tôi.
Đối với hồ sơ, tôi biết rằng tôi có thể sử dụng học chuyển để đạt được kết quả cao hơn nhiều, nhưng tôi rất thú vị khi xây dựng mạng này như một trải nghiệm tự học.
Cập nhật:
Tôi đang chạy mạng SAME với kích thước lô khác nhau, trong trường hợp này tôi đang sử dụng kích thước lô nhỏ hơn nhiều (16 thay vì 128) cho đến nay tôi đang đạt được độ chính xác 87,5% (thay vì 85%). Điều đó nói rằng, mạng cuối cùng kết thúc quá mức. Tuy nhiên, tôi không hiểu làm thế nào việc bỏ học 50% đơn vị không giúp được gì ... rõ ràng tôi đang làm gì đó sai ở đây. Có ý kiến gì không?
Cập nhật 2:
Có vẻ như vấn đề đã xảy ra với kích thước lô, vì với kích thước nhỏ hơn (16 thay vì 128), tôi hiện đạt được độ chính xác 92,8% trên bộ thử nghiệm của mình, với kích thước lô nhỏ hơn mà mạng vẫn mặc quần áo (các lô nhỏ kết thúc với độ chính xác 100%), tuy nhiên, tổn thất (lỗi) tiếp tục giảm và nói chung là ổn định hơn. Nhược điểm là thời gian chạy chậm hơn NHIỀU, nhưng nó hoàn toàn đáng để chờ đợi.