Pracowałem nad problemem regresji, w którym dane wejściowe to obraz, a etykieta ma wartość ciągłą od 80 do 350. Obrazy mają związek chemiczny po zajściu reakcji. Kolor, który się okazuje, wskazuje stężenie innej chemikaliów, która pozostała, i to właśnie model ma wytworzyć - stężenie tej substancji chemicznej. Obrazy można obracać, odwracać, kopiować, a oczekiwany wynik powinien być taki sam. Tego rodzaju analiza jest przeprowadzana w prawdziwych laboratoriach (bardzo wyspecjalizowane maszyny generują stężenie chemikaliów za pomocą analizy kolorów, tak jak trenuję ten model).
Do tej pory eksperymentowałem tylko z modelami z grubsza opartymi na VGG (wiele sekwencji bloków konw. Konw. Konw. Konw.). Przed eksperymentowaniem z nowszymi architekturami (Inception, ResNets itp.) Pomyślałem, że zbadam, czy istnieją inne architektury częściej używane do regresji przy użyciu obrazów.
Zestaw danych wygląda następująco:
Zestaw danych zawiera około 5000 próbek 250 x 250, których rozmiar zmieniłem na 64 x 64, więc trening jest łatwiejszy. Gdy znajdę obiecującą architekturę, eksperymentuję z obrazami o większej rozdzielczości.
Jak dotąd moje najlepsze modele mają średni błąd kwadratowy zarówno w zestawach szkoleniowych, jak i walidacyjnych wynoszący około 0,3, co jest dalekie od akceptowalnego w moim przypadku użycia.
Mój najlepszy model do tej pory wygląda następująco:
// 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)
Pytanie
Jaka jest odpowiednia architektura dla wyjścia regresji z wejścia obrazu?
Edytować
Przeformułowałem moje wyjaśnienie i usunąłem wzmiankę o dokładności.
Edytuj 2
Przekształciłem moje pytanie, więc mam nadzieję, że jasne jest, o co mi chodzi