tensorflow - 关于 keras 模型 : __call__ vs. 调用与预测方法的混淆

标签 tensorflow keras

我意识到我不太明白调用 __call__ 之间的区别。 , call , 或 predict Keras模型的方法。

例如,我们有一个经过训练的 keras 模型。调用代码后:

# After training.
y_pred_1 = model(X_new)
y_pred_2 = model.call(X_new)
y_pred_3 = model.predict(X_new)

我预计 y_pred_1 , y_pred_2 , 和 y_pred_3都是一样的。
但事实证明,它们并不相同。

你能向我解释一下区别吗?

最佳答案

只是为了补充答案,因为我也在寻找这个。当需要为推理阶段指定模型的训练标志时,例如,model(X_new, training=False)例如,当你有一个批量归一化层时,两个 predictpredict_on_batch当他们被执行时已经这样做了。
所以,model(X_new, training=False)model.predict_on_batch(X_new)是等价的。predict的区别和 predict_on_batch是后者在单个批次上运行,而前者在一个数据集上运行,该数据集被拆分为多个批次并将结果合并以生成最终的 numpy 预测数组。
除了@Dmitry Kabanov 提到的不同之外,这些函数会生成不同类型的输出,__call__生成一个张量,和 predictpredict_on_batch生成 numpy.ndarray , 和
according to the documentation , __call__predict 快小规模输入的功能,即适合一批。

关于tensorflow - 关于 keras 模型 : __call__ vs. 调用与预测方法的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60837962/

相关文章:

python - TensorFlow 变量范围 : reuse if variable exists

tensorflow - 在tensorflow中加载图像文件夹

python - 如何避免在修改时将 "keras_learning_phase"添加到模型中?

python - tensorflow/keras 神经网络中的复杂输入/输出是可能的吗?

python - ReduceLROnPlateau 使用 ADAM 优化器给出错误

python - TimeDistributed 与 TimeDistributedDense Keras

python - 无法保存管道估算器

python - 如何实现多类语义分割?

python - 使用TensorFlow Dataset API和flat_map的并行线程

tensorflow - 如何在 Tensorflow 中创建动态数量的层?