具有离散值的Keras Conv3D层

时间:2019-09-11 17:55:00

标签: tensorflow keras

我正在尝试建立一个将学习3D空间特征的模型。与图像处理不同,3D矩阵的值不是连续的。它们代表可以在该特定坐标处找到的“材料”的某个离散值(例如,值为1的草或值为2的楼梯)。

是否可以训练模型以学习空间特征而无需在中间值之间进行插值?例如,我不希望神经网络推断1.5是某种草丛。

3 个答案:

答案 0 :(得分:1)

您将要使用一热编码,该编码将分类值表示为零数组,且单个值设置为一。这意味着草(id = 1)将为[0, 1, 0, 0, ...],楼梯(id = 2)将为[0, 0, 1, 0, ...]。要执行一键编码,请查看keras的to_categorical函数。

进一步阅读:

答案 1 :(得分:1)

作为任何分类模型,这应该是“一次性”数据。

数据的“渠道”维度应为n-materials

  • 值= 0表示不存在该材料
  • 值= 1表示存在该材料

因此,您的输入形状将类似于(samples, spatial1, spatial2, spatial3, materials)。如果您的数据当前的形状为(samples, s1, s2, s3),并且材料如您所描述的那样是整数,则可以使用to_categorical将整数转换为“ one-hot”。

答案 2 :(得分:0)

尽管我不确定这是否是您要的,但我可以想象,在卷积网络的瓶颈之后,通常会使用平坦的层,然后输出进入密集的层。输出层(如果使用Sigmoid激活)将为您提供每个类的概率,这些类必须像其他人建议的那样进行一次热编码。

如果您想让网络本身的输出保持谨慎的价值,我想您可以在输出层中使用某种逐步激活功能。但是,您必须注意,您的损失在整个网络中仍然是可区分的(这就是为什么这种激活功能在keras中不可用的原因)。这可能很有趣:https://github.com/keras-team/keras/issues/7370