当预测高于或低于某个阈值时,我希望能够知道我的神经网络的舍入精度。例如,我希望它仅在预测值大于0.55或小于0.45时才计算准确性,以滤除接近50/50的情况。
我尝试在stackoverflow上使用soft_acc函数,并在开头添加一个if,以过滤掉接近50/50的时间。
def soft_acc(y_true, y_pred):
if y_pred > 0.55 or y_pred < 0.45:
return K.mean(K.equal(K.round(y_true), K.round(y_pred)))
我收到以下错误消息。
TypeError:不允许将tf.Tensor
用作Python bool
。使用if t is not None:
代替if t:
来测试是否定义了张量,并使用TensorFlow ops(例如tf.cond)执行以张量的值为条件的子图。
答案 0 :(得分:2)
使用tf.boolean_mask
筛选出不符合所需阈值的索引值。
# remove values from `X` in interval (lo, hi)
mask = tf.math.logical_or(tf.lesser(X, lo), tf.greater(X, hi))
X = tf.boolean_mask(X, mask)
在您的情况下,您将soft_acc
定义为
def soft_acc(y_true, y_pred):
mask = tf.math.logical_or(tf.greater(y_pred, 0.55), tf.lesser(y_pred, 0.45))
y_true2 = tf.boolean_mask(y_true, mask)
y_pred2 = tf.boolean_mask(y_pred, mask)
return K.mean(K.equal(K.round(y_true2), K.round(y_pred2)))