在 Keras 中使用
model(x)
和 model.predict(x)
预测模型结果有什么区别?
带有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)
的含义是相同的:它们并不完全相同。 来自Chollet 的 Python 深度学习:
.... 这意味着
调用可以扩展到非常大的数组。同时,predict()
发生在内存中并且不会扩展。另一方面,model(x)
是不可微分的:如果在 GradientTape 范围内调用它,则无法检索其梯度。 当您需要检索模型调用的梯度时,应该使用predict()
;如果您只需要输出值,则应该使用model(x)
。换句话说,除非您正在编写低级梯度下降循环(就像我们现在一样),否则请始终使用predict()
。predict()
model(x) 可以比 model.predict(x) 更快,在我的例子中,对于 DQN 中较小的 NN 来说快 5 倍