【问题标题】:How to find accuracy of a model in CNN?如何在 CNN 中找到模型的准确性?
【发布时间】:2019-06-20 20:18:14
【问题描述】:

我想找到一个定制的 CNN 模型的准确性。我有类变量(y_test)的权重(w)、损失值(l)和测试数据(x_test)。权重不能调整,它们应该保持不变。它就像一个单层前馈神经网络。

我想完成这个功能,以提供与 Keras 相同的准确性。

编辑1:二元类分类问题。

  def accuracy(x_test,y_test,w,l):
     y_pred=numpy.dot(x_test,w)
     acc=...
     return acc

如何像在 Keras 或任何其他 API 中一样完成准确性声明?

【问题讨论】:

  • 你想找到测试准确度,对吧?您可以创建一个测试数据集并对其进行测试,并将它们与正确的输出进行比较。然后只需获得平均准确率。
  • 既然是二分类问题,我不会达到绝对值。那怎么比较呢?

标签: python neural-network keras


【解决方案1】:

如果你想要类似于keras的东西,你只需要关心y_testy_predy_testy_true):

def acc(y_true, y_pred):
    return np.equal(np.argmax(y_true, axis=-1), np.argmax(y_pred, axis=-1)).mean()

这是我的 POC:

import numpy as np

# y_test onehot encoded
y_test = np.array([[1, 0, 0],[0, 1, 0],[0, 0, 1], [0, 1, 0], [1, 0, 0]])
y_pred = np.random.random((5,3))

print("y_true: " + str(np.argmax(y_test, axis=-1)))
print("y_pred: " + str(np.argmax(y_pred, axis=-1)))

def acc(y_true, y_pred):
    return np.equal(np.argmax(y_true, axis=-1), np.argmax(y_pred, axis=-1)).mean()

print("accuracy: " + str(acc(y_test, y_pred)))

结果:

y_real: [0 1 2 1 0]
y_pred: [1 1 0 1 0]
accuracy: 0.6

更新 1: 因为它是用于二进制分类,所以函数将是这样的:

def acc(y_true, y_pred):
    return np.equal(y_true, np.round(y_pred)).mean()

POC:

import numpy as np

y_test = np.array([1, 0, 0, 1, 0])
y_pred = np.random.random((5))

print("y_true: " + str(y_test))
print("y_pred: " + str(np.round(y_pred).astype(int)))

def acc(y_true, y_pred):
    return np.equal(y_true, np.round(y_pred)).mean()

print("accuracy: " + str(acc(y_test, y_pred)))

【讨论】:

  • 损失值在这里的作用是什么?
  • 你不需要损失来找到准确度。
  • 如果您的值介于 0 和 1 之间,请使用 np.round(),否则在 np.round() 之前应用 sigmoid 函数
【解决方案2】:

如果我没记错的话,您可以将您的 actualpredicted 值传递给 scoring 函数,该函数位于 mlxtend 库中。

查看Scoring - mlxtend 以获得更多解释。

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 2018-01-19
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多