Keras 中 model(x) 和 model.predict(x) 之间的区别?

问题描述 投票:0回答:3

在 Keras 中使用

model(x)
model.predict(x)
预测模型结果有什么区别?

python tensorflow keras
3个回答
32
投票

带有tensorflow后端的Keras使用底层tensorflow对象,但主要是提供可以在tensorflow环境之外理解的高级输出(例如,它可以输出numpy数组或python列表)。
今天给出了tensorflow 2.0中的模型(构建使用 keras 库),

out_np = model.predict(x)

提供了一个 numpy 数组,例如,可以用

print(out_np)
打印。
另一方面,

out_tf = model(x)

结果为张量流对象,可以使用

.numpy()
将其转换为 numpy 数组
两个结果是等价的,作为例子,我们有以下为真,

out_np.max() == out_tf.numpy().max()

格式可能不同,但

model(x)
model.predict(x)
的含义是相同的:
给定输入x,它是由其结构、权重和偏差表征的网络输出节点的值。


0
投票

它们并不完全相同。 来自Chollet 的 Python 深度学习

.... 这意味着

predict()
调用可以扩展到非常大的数组。同时,
model(x)
发生在内存中并且不会扩展。另一方面,
predict()
是不可微分的:如果在 GradientTape 范围内调用它,则无法检索其梯度。 当您需要检索模型调用的梯度时,应该使用
model(x)
;如果您只需要输出值,则应该使用
predict()
。换句话说,除非您正在编写低级梯度下降循环(就像我们现在一样),否则请始终使用
predict()


0
投票

model(x) 可以比 model.predict(x) 更快,在我的例子中,对于 DQN 中较小的 NN 来说快 5 倍

© www.soinside.com 2019 - 2024. All rights reserved.