Tôi đã làm việc với một vấn đề hồi quy trong đó đầu vào là một hình ảnh và nhãn là giá trị liên tục trong khoảng từ 80 đến 350. Hình ảnh là một số hóa chất sau khi xảy ra phản ứng. Màu sắc cho thấy nồng độ của một hóa chất khác còn sót lại, và đó là những gì mô hình tạo ra - nồng độ của hóa chất đó. Các hình ảnh có thể được xoay, lật, nhân đôi và đầu ra dự kiến vẫn giống nhau. Loại phân tích này được thực hiện trong các phòng thí nghiệm thực tế (các máy rất chuyên dụng tạo ra nồng độ của các hóa chất sử dụng phân tích màu giống như tôi đang đào tạo mô hình này để làm).
Cho đến nay, tôi chỉ thử nghiệm với các mô hình dựa trên VGG (nhiều chuỗi khối khối đối lưu). Trước khi thử nghiệm các kiến trúc gần đây hơn (Inception, ResNets, v.v.), tôi nghĩ tôi nên nghiên cứu nếu có các kiến trúc khác thường được sử dụng để hồi quy bằng hình ảnh.
Bộ dữ liệu trông như thế này:
Bộ dữ liệu chứa khoảng 5.000 mẫu 250x250, mà tôi đã thay đổi kích thước thành 64x64 để việc đào tạo dễ dàng hơn. Khi tôi tìm thấy một kiến trúc đầy hứa hẹn, tôi sẽ thử nghiệm với hình ảnh có độ phân giải lớn hơn.
Cho đến nay, các mô hình tốt nhất của tôi có lỗi bình phương trung bình trên cả hai tập huấn luyện và xác nhận khoảng 0,3, không thể chấp nhận được trong trường hợp sử dụng của tôi.
Mô hình tốt nhất của tôi cho đến nay trông như thế này:
// pseudo code
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = dropout()->conv2d(x, filters=128, kernel=[1, 1])->batch_norm()->relu()
x = dropout()->conv2d(x, filters=32, kernel=[1, 1])->batch_norm()->relu()
y = dense(x, units=1)
// loss = mean_squared_error(y, labels)
Câu hỏi
Kiến trúc thích hợp cho đầu ra hồi quy từ đầu vào hình ảnh là gì?
Chỉnh sửa
Tôi đã đọc lại lời giải thích của mình và loại bỏ đề cập về tính chính xác.
Chỉnh sửa 2
Tôi đã cấu trúc lại câu hỏi của mình để hy vọng nó rõ ràng những gì tôi đang theo đuổi