入力が画像で、ラベルが80から350の間の連続値である回帰問題に取り組んでいます。画像は、反応が起こった後のいくつかの化学物質のものです。判明する色は、残りの別の化学物質の濃度を示し、それがモデルが出力するものです-その化学物質の濃度。画像は回転、反転、ミラー化できますが、期待される出力は同じままです。この種の分析は実際のラボで行われます(このモデルをトレーニングするのと同じように、非常に特殊な機械が色分析を使用して化学物質の濃度を出力します)。
これまでのところ、おおよそVGG(conv-conv-conv-poolブロックの複数のシーケンス)に基づいたモデルで実験したことがあります。より最近のアーキテクチャ(Inception、ResNetなど)を試す前に、画像を使用した回帰でより一般的に使用される他のアーキテクチャがあるかどうかを調査したいと思いました。
データセットは次のようになります。
データセットには約5,000の250x250のサンプルが含まれていますが、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
私は私の質問を再構成したので、うまくいけば、私が何を求めているかが明確になる