【发布时间】:2019-02-06 23:31:09
【问题描述】:
我想在分类问题中进一步将输出类分成更少的桶。 我有 4 个输出类(即 0、1、2、3)。但在训练期间,我还想跟踪 2 个类的准确性:
- 将 0 和 1 视为 0 类
- 将 2 和 3 视为 1 类
为此,我创建了一个新指标并将其与模型一起编译:
def new_classes_acc(y_true, y_pred):
actual = tf.floor( y_true / 2 )
predicted = tf.floor( y_pred / 2 )
return K.categorical_crossentropy(actual, predicted)
这样编译:
model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy', new_classes_acc])
我得到nan 作为准确度值。这样做的正确方法是什么?
【问题讨论】:
-
当你使用
tf.floor(y_true/2)时,所有class 1都将转换为class 0,class 2和class 3将转换为class 1,最后class 2将保持不变。所以你创建了 3 个类class 0,1,2而不是 2 个。 -
感谢您的指出。更正了我的问题陈述。是一个错字。无论哪种方式,我仍然不清楚如何在 tf.keras 中正确执行此操作
标签: python tensorflow machine-learning keras loss-function