Keras和tensorflow的关系
你说得很对,这个问题值得澄清。
✅ 为什么建议加上 import tensorflow as tf ...?
尽管你的代码中没有显式写出 import tensorflow as tf,但实际上你间接使用了 TensorFlow,因为你使用了:
from keras.models import load_model
而这个 keras 是 TensorFlow 自带的 tf.keras 模块的封装。换句话说:
你调用的
load_model实际来自tensorflow.keras.models.load_model,而不是独立 Keras 2.x。
✅ 证明:keras 实际来源于 TensorFlow
你可以在 Python 中打印一下:
import keras
print(keras.__file__)
输出通常会是:
.../site-packages/keras/...
但如果你也执行:
import tensorflow.keras as tfk
print(tfk.__file__)
你会发现 keras 和 tensorflow.keras 是同一个包路径,只是别名不同。
✅ 所以为什么这段代码仍然有用?
即便你没有显式用 import tensorflow as tf:
from keras.models import load_model
实际上内部就加载了 TensorFlow,默认它就会初始化并尝试使用全部 GPU 显存。
如果你没有手动设置 memory growth,它可能就一次性申请所有 GPU 显存 —— 这在 Flask 这种长期运行服务中非常容易导致:
- ❌
allocate memory failure - ❌ GPU 显存耗尽后 Flask 崩溃或卡死
✅ 总结
你确实没显式用 tensorflow,但因为使用了 keras.models.load_model(),实际上仍然是基于 TensorFlow 的 tf.keras,所以 TensorFlow 的默认 GPU 策略仍会影响你的程序运行。
所以这段代码:
import tensorflow as tf
gpus = tf.config.list_physical_devices('GPU')
if gpus:
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
虽然看起来“多余”,但是为了防止 TensorFlow 初始化时一次性占满显存,从而避免崩溃,非常必要且推荐。
如果你希望我帮你确认是不是在用 tf.keras 而不是 standalone keras,你可以运行以下代码:
from keras import backend as K
print(K.backend())
输出大概率是:
tensorflow
这就再次印证了你的服务中 TensorFlow 实际已介入。是否继续帮你做环境推荐(TensorFlow + CUDA + 驱动)配置核查?

浙公网安备 33010602011771号