Я працював над проблемою регресії, де вводом є зображення, а мітка - це постійне значення між 80 і 350. Зображення містять деякі хімічні речовини після реакції. Колір, який виявляється, вказує на концентрацію іншого хімічного речовини, що залишився, і ось що виводить модель - концентрацію цієї хімічної речовини. Зображення можна обертати, перевертати, дзеркально відображати, а очікуваний вихід повинен бути однаковим. Такий аналіз проводиться в реальних лабораторіях (дуже спеціалізовані машини виводять концентрацію хімічних речовин за допомогою кольорового аналізу так само, як я навчаю цю модель робити).
Поки що я експериментував лише з моделями, орієнтованими приблизно на VGG (кілька послідовностей блоків conv-conv-conv-pool). Перш ніж експериментувати з більш новими архітектурами (Inception, ResNets тощо), я думав, що я би дослідив, чи є інші архітектури, які частіше використовуються для регресії з використанням зображень.
Набір даних виглядає приблизно так:
Набір даних містить близько 5000 зразків 250х250, які я змінив до 64x64, тому навчання легше. Як тільки я знайду перспективну архітектуру, я експериментую із зображеннями більшої роздільної здатності.
Поки що у моїх найкращих моделей середня помилка в квадраті як для навчальних, так і для валідаційних програм - приблизно 0,3, що далеко не прийнятно в моєму випадку використання.
Моя найкраща модель поки що виглядає так:
// 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)
Питання
Яка підходяща архітектура для регресійного виведення з зображення?
Редагувати
Я перефразував своє пояснення і видалив згадки про точність.
Редагуйте 2
Я реструктуризував своє запитання, так що, сподіваюся, зрозуміло, що я хочу