【问题标题】:What should the output layer of my CNN look like?我的 CNN 的输出层应该是什么样子?
【发布时间】:2017-12-11 17:08:52
【问题描述】:

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

  • 是否有更好的方法对输出进行编码?
  • 最后一层的激活函数应该是什么?我将 ReLU 用于隐藏层。
  • 损失函数应该是什么? mean_squared_error 会起作用吗?

【问题讨论】:

  • 为什么不用“较小的网络 (4*12)”分割图像并分别对每个网格场进行分类
  • 这些图像是从圆形钻孔中展平的。所以我对正弦模式感兴趣,以识别有趣的地质特征,而不是其他看起来相似但不是正弦的岩石特征。

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


【解决方案1】:

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

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

仅在检测的情况下(不分类此点)我建议您使用sigmoidbinary_crossentropy。在分类softmaxcategorical_crossentropy 的情况下。

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

【讨论】:

    猜你喜欢
    • 2023-01-04
    • 2015-12-09
    • 2017-12-14
    • 2016-06-17
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    相关资源
    最近更新 更多