我一直在尝试实现一个CNN,给定一个探测器的(75x75)图像,它将输出该图像源的(x,y)坐标。每个图像都有一些特性,可以确定源。我要解决的问题是,输出x,y坐标的回归器总是返回所有训练数据的平均像素值。我试图实现本文中概述的回归器:https://arxiv.org/abs/1803.10698,但它仍然给出了所有预测的平均像素值。这里是我的模型的简短版本:model = Sequential()
# Base Conv layer
model.add(Conv2D(32, kernel_size=patch_size, strides=(1, 1),
activation='relu', padding='same',
input_shape=(75, 75, 1)))
model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding=optimizer))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
for i in range(num_conv):
model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding='same))
model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding='same))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(Flatten())
for i in range(num_dense):
model.add(Dense(512, activation='linear'))
model.add(Dropout(dropout_layer))
# Final Dense layer
# 2 so have one for x and one for y
model.add(Dense(2, activation='linear'))
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
我没有代表张贴图片的来源,但这是真相和输出时,它是培训42000图像:
正如你所看到的,它是可怕的错误,所有的估计都在x,y坐标的平均值的一个点上。而实际值会形成一个覆盖整个探测器的圆圈。我不知道如何让它实际输出正确的值。我认为,作为损失的均方误差可能应该使估计成为中心值,因为它是与所有来源的最小平方距离,但我不确定如何尝试它,因为我想最小化每个预测和它各自的标签之间的距离。在