2

我对 keras 和 DL 相当陌生,我正在尝试构建一个损失函数,但我对来自网络的数据如何通过损失函数的 y_pred 和 y_true 传递有疑问。

例如,我的网络有 3 个不同的输出,这里是一个:

SEC5 = merge( [SEC1_up, SEC2_up, SEC3_up, SEC4_up], mode='concat', concat_axis=1 )

SEC5 = Convolution2D( 2,1,1, subsample=(1, 1), border_mode='same', activation="sigmoid" )( SEC5 )

SEC5 现在是一个 2 通道张量,它预测一个通道中的边缘和另一个通道中的非边缘。

我的模型是使用以下行创建的:

model = Model( input=inputs, output=[Final, ILLP2, SEC1, SEC2, SEC3, SEC4, SEC5] )

我在 Final 上执行二元交叉熵,在 ILLP2 上执行平方损失,然后对每个 SEC 层执行自定义损失。在构建自定义损失时,我遇到了一些我不理解的东西。多个通道层(如 SEC5)如何传递给损失函数?这在我的边缘损失中尤为重要,因为我需要计算边缘层中的边缘数,以及非边缘层中的非边缘数。

当我这样做时,我不明白的是损失函数中的实际变量(y_true 和 y_pred):

print 'y_true data'
print y_true.ndim
print y_true.type
print 'y_pred data'
print y_pred.ndim
print y_pred.type

我得到以下值:

y_true data
2
TensorType(float32, matrix)
y_pred data
2
TensorType(float32, matrix)

这就是我对一切感到非常困惑的地方。据我了解,矩阵的张量类型只能是二维的,但我本质上是 3 维的?它如何处理这些信息?

在我自己制作复杂的损失函数之前,我觉得我应该理解这一点,您可以提供给我的任何信息将不胜感激。

干杯,

迈克尔

4

0 回答 0