[英]Keras Model - Custom Accuracy Function for Three-Level Labels
我正在尝试修改Siamese Network的Keras 代码以适应三级标签 (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.