我生成一个大小为200x200的白色背景下的单个硬币图像。这些硬币是从8种欧元硬币图像中随机选择的(每种硬币一张),并具有以下特点:
- 随机旋转;
- 随机大小(在固定范围内);
- 随机位置(使硬币没有被修剪)。
这里有两个例子(添加了中心标记): Two dataset examples
我使用Python + Lasagne将彩色图像馈送到神经网络中,该网络具有2个完全连接的线性神经元输出层,一个用于x轴,一个用于y轴。 与生成的硬币图像相关联的目标是硬币中心的坐标(x,y)。
我尝试过以下方法(来自Using convolutional neural nets to detect facial keypoints tutorial):
- 具有不同层数和单位数(最大500)的密集层架构;
- 卷积架构(输出之前具有2个稠密层);
- 平方差的总和或平均值(MSE)作为损失函数;
- 原始范围[0,199]或归一化[0,1]中的目标坐标;
- 在层之间使用丢失层,丢失概率为0.2。
我总是使用简单的SGD,并调整学习率以尝试获得漂亮的下降误差曲线。
我发现随着网络的训练,错误会减少到一个点,此时输出始终是图像的中心。看起来输出与输入无关。似乎网络输出是我给出目标的平均值。这种行为看起来像是简单的误差最小化,因为硬币的位置在图像上是均匀分布的。这不是想要的行为。
我感觉这个网络并没有真正学习,只是试图优化输出坐标以最小化与目标的平均误差。我是对的吗?我该如何防止这种情况发生?我尝试去除输出神经元的偏差,因为我认为可能只是修改了偏差而其他参数都被设置为零,但这并没有起作用。
一个神经网络是否能够单独完成这项任务?我已经阅读过可以训练一个网络进行有/无二进制分类,然后扫描图像以查找对象可能的位置。但我想知道是否可能仅使用神经网络的前向计算就能完成。