CNN的输出层应该是什么样的?

时间:2017-07-07 11:53:25

标签: python machine-learning neural-network deep-learning keras

我正在运行一个模型来检测图像中的一些有趣的功能。我有一组600x200像素的图像。这些图像具有我想要识别的岩石碎片等特征。想象一下,覆盖在图像上的(4x12)网格我可以使用注释器工具(例如((4,9), (3,10), (3,11), (3,12)))手动生成注释,以识别图像中的有趣单元格。我可以使用Keras构建CNN模型,输入为灰度图像。但是我应该如何编码输出。对我而言,一种看似直观的方法是将其视为形状(12,4,1)的稀疏矩阵,只有有趣的单元格为1,而其他单元格为0。

  • 是否有更好的方法对输出进行编码?
  • 最后一层的激活功能应该是什么?我正在使用ReLU作为隐藏层。
  • 损失功能应该是什么? mean_squared_error会工作吗?

1 个答案:

答案 0 :(得分:2)

您的问题与检测和分割问题非常相似(您可以阅读它here。您提出的方法是合理的,因为在检测和分割任务中计算您提出的特征图是一个常见的部分培训管道。但是 - 您可能会遇到几个问题:

  • 内存问题:您需要处理稀疏张量或使用生成器来处理内存问题,
  • 丢失和激活:Keras API目前不支持丢失和激活细分,因此您需要自行实施。 Herehere您可以找到有关如何解决此问题的示例。

如果只是检测(不是这一点的分类),我建议您使用sigmoidbinary_crossentropy。如果是分类softmaxcategorical_crossentropy

当然 - 还有其他方法可以解决这个问题。人们可以将其解决为回归,您需要预测有趣事物的像素。但是处理Keras中不同的输入是相当麻烦的。