导出Keras模型至TensorFlow时遇'Sequential'无'_is_graph_network'属性错误
解决Keras模型导出至TensorFlow时的
_is_graph_network属性错误 先明确你的问题场景:
我尝试将Keras模型导出至TensorFlow,使用的版本信息为:Keras 2.1.4、TensorFlow 1.3.0、Numpy 1.13.3。模型代码如下:
img_width, img_height = 150, 150 batch_size = 32 samples_per_epoch = 1000 validation_steps = 300 nb_filters1 = 32 nb_filters2 = 64 conv1_size = 3 conv2_size = 2 pool_size = 2 classes_num = 3 lr = 0.0004 model = Sequential() model.add(Conv2D(32, (3, 3), input_shape=(img_width, img_height, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) # 后续模型结构省略操作时出现错误:
'Sequential' object has no attribute '_is_graph_network'
问题根源
这个报错在早期Keras和TensorFlow的搭配里特别常见,核心是独立版Keras与TensorFlow内置Keras(tf.keras)的兼容性冲突:
- 你当前用的是独立的
keras包构建模型,但_is_graph_network是TensorFlow自带的tf.keras模型才有的专属属性; - 当你尝试用TensorFlow的导出方法处理独立Keras的
Sequential模型时,就会因为属性不匹配触发这个错误。
可行解决方案
方案1:用独立Keras导出后转TensorFlow兼容格式
独立Keras本身支持将模型保存为HDF5格式,之后可以通过两种方式转换为TensorFlow兼容的模型:
# 第一步:保存独立Keras模型 model.save('my_keras_model.h5') # 方法一:直接用tf.keras加载(TF1.3.0可能存在小兼容性问题,优先试试) from tensorflow.keras.models import load_model tf_model = load_model('my_keras_model.h5') # 如果方法一报错,试试方法二:先加载再转换模型结构 from keras.models import load_model as keras_load_model from tensorflow.keras.models import model_from_json # 用独立Keras加载原模型 keras_model = keras_load_model('my_keras_model.h5') # 导出模型结构为JSON,再用tf.keras重建 model_json = keras_model.to_json() tf_model = model_from_json(model_json) # 复制原模型权重 tf_model.set_weights(keras_model.get_weights()) # 保存为TensorFlow格式 tf_model.save('my_tf_compatible_model')
方案2:直接用tf.keras构建模型
既然最终要导出到TensorFlow,不如从一开始就用TensorFlow内置的tf.keras搭建模型,彻底规避兼容性问题:
# 替换导入路径,使用tf.keras的组件 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, Activation, MaxPooling2D, Dense, Flatten # 参数定义保持和原来一致 img_width, img_height = 150, 150 batch_size = 32 # ... 省略其他参数定义 ... # 模型构建逻辑和原代码完全一致 model = Sequential() model.add(Conv2D(32, (3, 3), input_shape=(img_width, img_height, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) # 补充完整后续模型层(示例) model.add(Flatten()) model.add(Dense(64)) model.add(Activation('relu')) model.add(Dense(classes_num)) model.add(Activation('softmax')) # 编译和训练逻辑不变 model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) # 训练完成后直接导出TensorFlow模型 model.save('my_trained_tf_model')
方案3:升级版本(如果业务允许)
你使用的Keras 2.1.4和TensorFlow 1.3.0都是比较早期的版本,很多兼容性问题在后续版本中已经修复。如果你的代码没有强依赖旧版本API,可以考虑升级到:
- Keras 2.2.x 搭配 TensorFlow 1.10+(改动较小)
- 或者直接升级到TensorFlow 2.x(需要适配TF2的API变化,但长期维护性更好)
内容的提问来源于stack exchange,提问作者Romeo Kienzler
相关产品推荐
相关产品推荐

