我一直在研究回归问题,其中输入是图像,标签是80到350之间的连续值。图像是发生反应后的某些化学物质。原来的颜色表示剩余的另一种化学品的浓度,这就是模型要输出的-该化学品的浓度。图像可以旋转,翻转,镜像,并且预期的输出应该仍然相同。这种分析是在真实的实验室中完成的(非常专业的机器使用颜色分析来输出化学药品的浓度,就像我正在训练该模型一样)。
到目前为止,我仅试验了大致基于VGG(conv-conv-conv-pool块的多个序列)的模型。在尝试使用较新的体系结构(Inception,ResNets等)之前,我想研究一下是否存在其他更常用的图像回归体系结构。
数据集如下所示:
该数据集包含约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
我已经重新整理了我的问题,所以希望我很清楚