首页 > 解决方案 > 如何在keras中使用evaluate_generator?

问题描述

当我训练了一个模型并将参数保存为 hdf5 文件,然后我尝试在 上评估模型的性能,test_dataset但是如果我设置为 param metricsmodel.compilemetrics

model.compile(optimizer=adam,
              loss=losses.sparse_categorical_crossentropy,
              metrics=[cus_acc, miou])  

会出现如下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: assertion failed: [`labels` out of bound] [Condition x < y did not hold element-wise:] [x (metrics/cus_acc/confusion_matrix/control_dependency:0) = ] [107 118 135...] [y (metrics/cus_acc/confusion_matrix/Cast_2:0) = ] [2]  [[Node: metrics/cus_acc/confusion_matrix/assert_less/Assert/AssertGuard/Assert = Assert[T=[DT_STRING, DT_STRING, DT_STRING, DT_INT64, DT_STRING, DT_INT64], summarize=3, _device="/job:localhost/replica:0/task:0/device:CPU:0"](metrics/cus_acc/confusion_matrix/assert_less/Assert/AssertGuard/Assert/Switch/_3827, metrics/cus_acc/confusion_matrix/assert_less/Assert/AssertGuard/Assert/data_0, metrics/cus_acc/confusion_matrix/assert_less/Assert/AssertGuard/Assert/data_1, metrics/cus_acc/confusion_matrix/assert_less/Assert/AssertGuard/Assert/data_2, metrics/cus_acc/confusion_matrix/assert_less/Assert/AssertGuard/Assert/Switch_1/_3829, metrics/cus_acc/confusion_matrix/assert_less/Assert/AssertGuard/Assert/data_4, metrics/cus_acc/confusion_matrix/assert_less/Assert/AssertGuard/Assert/Switch_2/_3831)]]

注意优化器adam已定义,cus_acc并且miou是自定义指标。如果删除它起作用的指标,那么我认为它一定有问题,miou并且cus_acc都是由confusion_matrix.
我的问题是导致错误发生的原因以及如何使用 evaluate_generator 来评估 keras 中的模型性能,如果您可以提供最好的示例代码〜
任何帮助将不胜感激。提前致谢。:D

标签: python-3.xkerasdeep-learning

解决方案


已经解决了。
在创建confusion_matrix时出现错误,nb_classes即0、1、2必须匹配ground-truth0、1、2中的标签。例如,ground-truth没有预处理,像素的值为0、127、255。然后会InvalidArgumentError: assertion failed发生。
使我的代码出错的原因不是由于自定义指标,而是当我为 ground-truth 创建一个 data_generator 时,它的param directory设置与images.


推荐阅读