当预测高于或低于某个阈值时,我希望能够知道神经网络的圆形精度。例如,我希望它仅在预测高于0.55或低于0.45时计算准确度,以便过滤掉 50/50附近的情况。

我尝试在stackoverflow上使用soft_acc function并在开头添加一个if else来过滤掉附近的 50/50s.

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操作(如tf.cond)来执行以张量值为条件的子图。

分析解答

使用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)))