Neural network 用Keras模型的精度评价神经网络

Neural network 用Keras模型的精度评价神经网络,neural-network,keras,keras-layer,Neural Network,Keras,Keras Layer,在Keras中,当训练和评估神经网络模型(分为两类(0和1))时,模型会返回训练和测试的损失和准确性: model.compile(loss=“categorical\u crossentropy”,optimizer=“adam”,metrics=['accurity'])) 这个准确度代表什么?这是两个类别的平均准确度还是两个类别之一的准确度?准确度是正确分类的样本数除以所有样本数。它不涉及任何每类精度 以下是Keras用于计算二进制精度的代码示例: K.mean(K.equal(y_tr

在Keras中,当训练和评估神经网络模型(分为两类(0和1))时,模型会返回训练和测试的损失和准确性:

model.compile(loss=“categorical\u crossentropy”,optimizer=“adam”,metrics=['accurity']))

这个准确度代表什么?这是两个类别的平均准确度还是两个类别之一的准确度?

准确度是正确分类的样本数除以所有样本数。它不涉及任何每类精度

以下是Keras用于计算二进制精度的代码示例:

K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)

准确度是正确分类的样本数除以所有样本数。它不涉及任何每类精度

以下是Keras用于计算二进制精度的代码示例:

K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)

Keras将从其代码中的可能指标列表中进行选择。从源代码来看,有五种可能性:

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):
    return K.cast(K.equal(K.max(y_true, axis=-1),
    K.cast(K.argmax(y_pred, axis=-1), K.floatx())),
    K.floatx())

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)
选择取决于您拥有的模型类型和损失函数。在模块中,您可以看到它选择精度函数:

if (output_shape[-1] == 1 or self.loss_functions[i] == losses.binary_crossentropy):
    # case: binary accuracy
    acc_fn = metrics_module.binary_accuracy

elif self.loss_functions[i] == losses.sparse_categorical_crossentropy:
    # case: categorical accuracy with sparse targets
    acc_fn = metrics_module.sparse_categorical_accuracy

else:
    acc_fn = metrics_module.categorical_accuracy
在您的模型中,您有两个输出和一个
分类交叉熵
损失,因此您将在案例3中下降,您的准确度将为:

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())
转换后,您的模型预期只有一个类为真,如果具有最大值的预测类的索引等于真类的索引,则它算作正确

例如:

  • 预测值:[0.7;0.3]///true:[1;0]--计算为正确
  • 预测值:[0.8;0,2]///true:[0;1]--计为错误

Keras将从其代码中的可能指标列表中进行选择。从源代码来看,有五种可能性:

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):
    return K.cast(K.equal(K.max(y_true, axis=-1),
    K.cast(K.argmax(y_pred, axis=-1), K.floatx())),
    K.floatx())

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)
选择取决于您拥有的模型类型和损失函数。在模块中,您可以看到它选择精度函数:

if (output_shape[-1] == 1 or self.loss_functions[i] == losses.binary_crossentropy):
    # case: binary accuracy
    acc_fn = metrics_module.binary_accuracy

elif self.loss_functions[i] == losses.sparse_categorical_crossentropy:
    # case: categorical accuracy with sparse targets
    acc_fn = metrics_module.sparse_categorical_accuracy

else:
    acc_fn = metrics_module.categorical_accuracy
在您的模型中,您有两个输出和一个
分类交叉熵
损失,因此您将在案例3中下降,您的准确度将为:

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())
转换后,您的模型预期只有一个类为真,如果具有最大值的预测类的索引等于真类的索引,则它算作正确

例如:

  • 预测值:[0.7;0.3]///true:[1;0]--计算为正确
  • 预测值:[0.8;0,2]///true:[0;1]--计为错误