如何解决我的损失自定义函数是否可以执行我认为的功能?
我有一个带有自定义损失函数的Keras模型(如下所示)。预期的行为是,当地面真理的第一个数字(第4位)为正时,网络应尝试近似所有8个参数。否则,它应该仅尝试近似第一个参数(并输出其他任何参数)。换句话说,当真集合的第一个参数为0或负数时,其余参数无关紧要。我做对了吗?我可以使用像这样的tf slice吗?
我注意到参数1-7普遍比我期望的更接近0。好像该功能只是在各处执行MSE。
def custom_loss(y_true,y_pred):
truthiness = tf.greater(y_true[:,:,0],tf.constant(0.0))
loss = tf.where(
truthiness,tf.keras.losses.MeanSquaredError()(y_true[:,0:8],y_pred[:,0:8]),0]),)
return loss
解决方法
答案似乎是Keras.losses.MeanSquaredError中的某些意外行为(至少对我而言)。我最终只是在纯张量流中实现了损失。
truthiness = tf.cast(tf.greater(y_true[:,:,0],tf.constant(0.0)),dtype=tf.float32)
falsyness = tf.cast(tf.less_equal(y_true[:,dtype=tf.float32)
loss = tf.reduce_sum(tf.square(y_true[:,0] - y_pred[:,0])) + \
tf.multiply(
truthiness,tf.reduce_sum(tf.square(y_true[:,1:8] - y_pred[:,1:8])),)
loss_2 = tf.multiply(truthiness,tf.keras.losses.MeanSquaredError()(y_true[:,0:8],y_pred[:,0:8])) + \
tf.multiply(falsyness,0]))
我希望loss和loss_2相等,但事实并非如此。重新发明轮子的FTW!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。