我想知道在使用metrics=['accuracy']
时使用了什么精度函数:
model.compile(loss='binary_crossentropy', metrics=['accuracy'])
我看到了keras/metrics.py个文件。该文件中有some_accuracy
个函数。但是我找不到accuracy
。在哪里可以看到源代码及其工作原理?
答案 0 :(得分:2)
您使用的适当的精度函数is inferred automatically from the loss function。如您所述,精度函数已在metric.py文件中定义:
def binary_accuracy(y_true, y_pred):
return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
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())
def sparse_categorical_accuracy(y_true, y_pred):
# flatten y_true in case it's in shape (num_samples, 1) instead of (num_samples,)
return K.cast(K.equal(K.flatten(y_true),
K.cast(K.argmax(y_pred, axis=-1), K.floatx())),
K.floatx())
binary_accuracy
)或将(..., 1)
用作损耗时,使用 binary_crossentropy
。
sparse_categorical_accuracy
用作损失函数时,使用 sparse_categorical_crossentropy
。
最后,将categorical_accuracy
设置为损失函数时,将使用categorical_crossentropy
。
此外,请注意accuracy
度量标准仅对分类任务有效。因此,如果在回归任务中使用accuarcy
作为指标,则报告的指标值可能根本无效。
此外,还有另外两个内置的精度函数:
def top_k_categorical_accuracy(y_true, y_pred, k=5):
return K.mean(K.in_top_k(y_pred, K.argmax(y_true, axis=-1), k), axis=-1)
def sparse_top_k_categorical_accuracy(y_true, y_pred, k=5):
return K.mean(K.in_top_k(y_pred, K.cast(K.max(y_true, axis=-1), 'int32'), k), axis=-1)
要使用它们,您需要将其名称显式传递给metrics
参数,即metrics=['top_k_categorical_accuracy']
或metrics=['sparse_top_k_categorical_accuracy']