Python 近似小于或等于的可微张量运算?

Python 近似小于或等于的可微张量运算?,python,tensorflow,math,keras,Python,Tensorflow,Math,Keras,我试图最大化接近真实值的预测数量,即使这会导致疯狂的异常值,否则可能会扭曲中值(我已经有工作损失)或平均值 因此,我尝试了这个自定义损失函数: def损失三分之一大于十分之一错误(y_真,y_pred): """ 当前不作为损失使用:不可微 ValueError:操作的梯度为“无”。请确保所有操作都定义了梯度(即可微分)。没有梯度的常见操作:K.argmax、K.round、K.eval。 看见https://keras.io/losses/ """ 从keras导入后端为K 导入tensorf

我试图最大化接近真实值的预测数量,即使这会导致疯狂的异常值,否则可能会扭曲中值(我已经有工作损失)或平均值

因此,我尝试了这个自定义损失函数:

def损失三分之一大于十分之一错误(y_真,y_pred):
"""
当前不作为损失使用:不可微
ValueError:操作的梯度为“无”。请确保所有操作都定义了梯度(即可微分)。没有梯度的常见操作:K.argmax、K.round、K.eval。
看见https://keras.io/losses/
"""
从keras导入后端为K
导入tensorflow作为tf
diff=K.abs((y_真-y_pred)/K.clip(K.abs(y_真),K.epsilon(),无))
withinTenPct=tf.reduce_sum(tf.cast(K.less_equal(diff,0.1),tf.int32),axis=-1)/tf.size(diff,out_type=tf.int32)
返回100*(1-tf.cast(有意图,tf.float32))
我知道至少
less_equal
函数是不可微的(我不确定它是否也会对
tf.size
产生影响);是否存在一些可以近似“小于或等于”的张量运算


我使用的是Tensorflow 1.12.3,无法升级,因此即使
tf.numpy_函数(lambda x:np.sum(x),从错误消息来看,Keras中似乎还没有实现某些梯度操作

您可以尝试使用Tensorflow操作来实现相同的结果(未测试!):

或者,您可以尝试
tf.keras.loss.logcosh(y\u true,y\u pred)


因为它似乎适合您的用例。请参见错误消息中的,它看起来好像在Keras中没有实现某些渐变操作

您可以尝试使用Tensorflow操作来实现相同的结果(未测试!):

或者,您可以尝试
tf.keras.loss.logcosh(y\u true,y\u pred)

因为它似乎适合您的用例。请参阅

 diff = tf.abs(y_true - y_pred) / tf.clip_by_value(tf.abs(y_true), 1e-12, 1e12))
 withinTenPct = tf.reduce_mean(tf.cast(tf.less_equal(diff, tf.constant(0.1, dtype=tf.float32, shape=tf.shape(diff)), tf.int32)))
 return 100.0 * (1.0 - tf.cast(withinTenPct, tf.float32))