Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 分别对每个批处理元素调用Keras Model.evaluate()_Python_Tensorflow_Keras - Fatal编程技术网

Python 分别对每个批处理元素调用Keras Model.evaluate()

Python 分别对每个批处理元素调用Keras Model.evaluate(),python,tensorflow,keras,Python,Tensorflow,Keras,我想对我的一批测试数据调用tf.keras.Model.evaluate()(或类似的方法),并且我想分别获得每个批次元素的损失/指标。因此,如果批次长度为64个元素,我希望返回一个包含64个损失/指标的列表 我需要这个,以便在测试数据集中找到异常值 我试着在批处理()上调用test\u,或者在单个批处理上调用evaluate(),但是这个方法聚合了批处理结果(我假设是通过平均值),并且对每个元素单独进行批处理,虽然可能,但在我的GPU上要花费10-20倍的时间 我还尝试调用predict()并

我想对我的一批测试数据调用
tf.keras.Model.evaluate()
(或类似的方法),并且我想分别获得每个批次元素的损失/指标。因此,如果批次长度为64个元素,我希望返回一个包含64个损失/指标的列表

我需要这个,以便在测试数据集中找到异常值

我试着在批处理()上调用test\u,或者在单个批处理上调用evaluate(),但是这个方法聚合了批处理结果(我假设是通过平均值),并且对每个元素单独进行批处理,虽然可能,但在我的GPU上要花费10-20倍的时间

我还尝试调用predict()并手动计算损失/指标,但这种方法的性能也会急剧下降(从测试数据集和预测中计算每个损失/指标的后续手动步骤)


有没有一种方法可以在不影响性能的情况下做到这一点?

将TensorFlow度量/损失函数与
模型一起使用。predict()
速度快且不涉及循环

考虑到该虚拟分类任务:

X = np.random.uniform(0,1, (64,28,28,1))
y = np.random.randint(0,2, 64)

model = Sequential([Flatten(), Dense(2, activation='softmax')])
model.compile('adam', 
              loss=tf.keras.losses.SparseCategoricalCrossentropy(), 
              metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
model.fit(X,y, epochs=3)
您可以通过以下方式评估每个批次元素的分数

scce = tf.keras.losses.sparse_categorical_crossentropy(y, model.predict(X))
# scce.shape ==> (64,)

scca = tf.keras.metrics.sparse_categorical_accuracy(y, model.predict(X))
# scca.shape ==> (64,)
这些分数是通过
model.evaluate()

scce\u eval
等于
tf.reduce\u mean(scce)


scca\u eval
等于
tf.reduce\u mean(scca)

评估中涉及哪些损失/指标?@MarcoCerliani这是mnist上的一个非常简单的例子,所以SparseCategoricCrossentity和SparseCategoricAcacacaccuracy,但这对问题不重要,对吗?谢谢@MarcoCerliani,这似乎是一个很好的方法。我想知道,因为我正在构建一个外部库,其中的score函数可能不同,或者是各种度量的组合,是否有任何方法可以在不调用单个度量/损失函数的情况下计算它,因为Keras已经拥有了所有的信息。有没有办法要求Keras模型返回其当前编译的损失函数,或者任何其他已编译的指标,例如?我在评论中说u(在评论中)出于这个原因涉及的指标/损失。。。如果你有自己的自定义损失/指标,你必须在最后写下它,而不是平均减少。这样,在拟合过程中,标准keras模型将自行计算平均减少量,而在评估过程中,u将可以按照我显示u的方式自由获得批次分数(使用相同的函数)。。。如果你保留它的价值,别忘了投赞成票并接受它作为答案;-)
scce_eval, scca_eval = model.evaluate(X,y, verbose=0)