功能keras.metrics.binary_accuracy非常简单:
def binary_accuracy(y_true, y_pred):
return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
Run Code Online (Sandbox Code Playgroud)
https://github.com/fchollet/keras/blob/master/keras/metrics.py#L20
但是功能keras.metrics.categorical_accuracy有所不同:
def categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.argmax(y_true, axis=-1),
K.argmax(y_pred, axis=-1)),
K.floatx())
Run Code Online (Sandbox Code Playgroud)
https://github.com/fchollet/keras/blob/master/keras/metrics.py#L24
我很困惑,为什么这个功能使用K.cast,而不是K.mean?因为我认为这个函数应该像函数一样返回一个数字keras.metrics.binary_accuracy
原因cast是因为argmax返回一个整数,它是最高值的索引.但结果必须是浮动的.
该argmax函数:
该argmax功能还将降低输入的等级.注意它使用axis=-1,意味着它将采用最后一个轴的最大值的索引,消除该轴,但保持其他轴.
假设您的输入有形状(10 samples, 5 features),返回的张量就是这样(10 samples,)
在mean使用功能axis=-1:
通常,mean函数返回标量,但是如果仔细观察binary_accuracy,您还会注意到,通过axis=-1在mean函数中使用,它不会将输入减少到单个标量值.它以完全相同的方式减小张量argmax,但在这种情况下,计算平均值.
输入(10,5)也会出现(10,).
最后结果:
因此,我们可以得出结论,两个指标都返回具有相同形状的张量.现在,他们都没有减少标量值的原因是因为Keras提供了更多的可能性,例如样本加权和一些其他额外的操作与损失(包括你自己的自定义损失,如果你想把Keras'作为一个基础).这些将依赖于样品的损失.
在某个地方,Keras将计算最终的平均值.
| 归档时间: |
|
| 查看次数: |
999 次 |
| 最近记录: |