我对keras和DL相当新,我正在尝试建立一个损失函数,但我对如何通过损失函数的y_pred和y_true传递来自网络的数据有疑问。
例如,我的网络有三种不同的输出,其中一种是:
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] )
我在ILLP2上的Final,Squared损失上执行二进制交叉熵,然后在每个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)
这就是我对所有事情感到困惑的地方。据我了解,矩阵的张量类型只能是2维,但我基本上有3个维度?它是如何处理这些信息的?
在我自己制作精心设计的丢失功能之前,我觉得我应该理解这一点,非常感谢您提供给我的任何信息。
干杯,
迈克尔