我意识到我不太明白调用 __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)
例如,当你有一个批量归一化层时,两个 predict
和 predict_on_batch
当他们被执行时已经这样做了。
所以,model(X_new, training=False)
和 model.predict_on_batch(X_new)
是等价的。predict
的区别和 predict_on_batch
是后者在单个批次上运行,而前者在一个数据集上运行,该数据集被拆分为多个批次并将结果合并以生成最终的 numpy 预测数组。
除了@Dmitry Kabanov 提到的不同之外,这些函数会生成不同类型的输出,__call__
生成一个张量,和 predict
和 predict_on_batch
生成 numpy.ndarray
, 和
according to the documentation , __call__
比 predict
快小规模输入的功能,即适合一批。
关于tensorflow - 关于 keras 模型 : __call__ vs. 调用与预测方法的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60837962/