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

Python 我的CNN的输出层应该是什么样子?,python,machine-learning,neural-network,deep-learning,keras,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 有没有更好的方法对输出进行编

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

  • 有没有更好的方法对输出进行编码
  • 最后一层的激活功能应该是什么?我正在为隐藏层使用ReLU
  • 损失函数应该是什么?
    均方误差
    有效吗

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

  • 内存问题:您需要处理稀疏张量或使用生成器来处理内存问题
  • 丢失和激活:Keras API目前不支持用于分段的丢失和激活,因此您需要自己实现它。您可以找到如何解决此问题的示例
仅在检测的情况下(不包括该点的分类),我建议您使用
sigmoid
binary\u crossentropy
。在分类的情况下
softmax
category\u crossentropy


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

你为什么不把你的图像分割开来,用一个“更小的网络(4*12)”这些图像是从圆形钻孔中展平的。因此我对正弦模式感兴趣,以识别有趣的地质特征,而不是其他看起来相似但不是正弦的岩石特征。