[英]Error in batch size with custom loss function in Keras
我正在使用 Keras 开发检测器,其中 output y_true 包含在具有 500 个值的向量“y”中,其中包含一个脉冲,该脉冲指示在信号的 500 个样本中检测到的事件的时间。
Ex: y=[0, 0, 0,....,0,1,1,1,1,1,1,1,1,1,1,1,0,....0,0,0]
我之前曾使用“mse”来处理损失,它可以工作,但我想使用损失 function 考虑 y_true 中脉冲的中间值与 y_pred 中的最大值之间的距离。 稍后我使用 y_pred 中的最大值对其进行归一化并定义其周围的脉冲。
由于我不能只使用距离并使其可微,我定义了这个自定义损失 function,它用估计的距离加权均方误差。
import tensorflow as tf
import keras.backend as kb
def custom_loss_function (y_true, y_pred):
t_label = []
t_picking = 0
t_label = tf.where(y_true == 1)[:,0]
mayor = tf.reduce_max(y_pred)
t_picking = tf.where(y_pred == mayor)[:,0]
d = tf.cast(abs(t_label[5]-t_picking)/50,tf.float32)
loss = (kb.mean(kb.square(y_true-y_pred)))*d
return loss
其中 t_label[5] 和 t_picking 分别是 y_trye 中脉冲的中间值和 y_pred 中的最大值。 d 是它们之间的距离。
我编译了 model 与这个损失 function,使用 Adam 优化器和 64 的批量大小。一切正常,并且 model 可以编译:但我得到这个错误在训练中间
InvalidArgumentError: Incompatible shapes: [64] vs. [2]
[[node Adam/gradients/gradients/loss/dense_1_loss/custom_loss_function/weighted_loss/mul_grad/BroadcastGradientArgs (defined at C:\Users\Maca\anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py:3009) ]] [Op:__inference_keras_scratch_graph_2220]
我之前尝试过使用其他自定义损失函数并且没有遇到这个问题,但我看不出错误来自哪里。
你知道我为什么会收到这个错误,我该如何解决?
特定批次中有两个相等的最大值。 所以你的t_picking
有时(很少)有两个(甚至更多)值而不是一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.