繁体   English   中英

Keras 模型 - 三级标签的自定义精度函数

[英]Keras Model - Custom Accuracy Function for Three-Level Labels

我正在尝试修改Siamese NetworkKeras 代码以适应三级标签 (0, 0.5, 1) 并且在编写自定义精度函数时遇到问题。

在下面的精度函数中,我收到一个 TypeError 说“Tensor”对象不支持项目分配。 我对这个领域很陌生,在处理 Tensorflow 对象方面没有太多经验,所以我真的很感激任何建议。

谢谢,

def accuracy(y_true, y_pred):
    pred = y_pred
    pred[y_pred <= 1 / 3] = 0
    pred[y_pred > 1 / 3 and y_pred <= 2 / 3] = 0.5
    pred[y_pred > 2 / 3] = 1
    return K.constant(np.mean(pred == y_true))


# train
rms = RMSprop()
model.compile(loss=contrastive_loss, optimizer=rms, metrics=[accuracy])
model.fit([tr_pairs[:, 0], tr_pairs[:, 1]], tr_y,
          batch_size=128,
          epochs=50,
          validation_data=([te_pairs[:, 0], te_pairs[:, 1]], te_y))

您不能为Tensor赋值。 在您的情况下,您可以像这样修改准确度函数:

def accuracy(y_true, y_pred):
    pred = tf.zeros_like(y_pred)
    pred += 0.5*tf.cast(K.all(K.stack([K.less_equal(y_pred, 2/3),K.greater(y_pred, 1/3)], axis=0),axis=0), dtype=tf.float32)
    pred += tf.cast((y_pred > 2 / 3), dtype=tf.float32)
    return K.mean(K.equal(y_true, pred))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM