使用tfmot量化Keras模型报错:仅支持Sequential/Functional模型
问题原因
你遇到的ValueError是因为环境中Keras 3.5.0和tensorflow-model-optimization 0.8.0版本不兼容:
- 旧版
tensorflow-model-optimization仅支持TensorFlow内置的tf.keras模型,而Keras 3是独立于TensorFlow的版本,你定义的Sequential是Keras 3原生模型,无法被quantize_model识别。
解决方案
有两种可行的解决方式:
方式一:升级tensorflow-model-optimization到兼容版本
执行以下命令升级库,0.10.0及以上版本开始支持Keras 3:
pip install --upgrade tensorflow-model-optimization
升级后无需修改现有模型定义代码,直接重新运行即可。
方式二:改用tf.keras构建模型(不升级库)
修改模型定义代码,强制使用TensorFlow内置的tf.kerasAPI,确保模型是tf.keras.Sequential类型:
def base_model(): # 改用tf.keras.Sequential model = tf.keras.Sequential() model.add(tf.keras.layers.Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=(28,28,1))) model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2))) model.add(tf.keras.layers.Conv2D(64, kernel_size=(3, 3), activation="relu")) model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dropout(0.5)) model.add(tf.keras.layers.Dense(100, activation="relu")) model.add(tf.keras.layers.Dense(10, activation="softmax")) return model
额外提示
你的代码中CategoricalCrossentropy(from_logits=True)设置有误:模型最后一层用了softmax激活,输出是概率分布,不是logits,应该把from_logits改为False,否则会影响训练效果:
q_aware_model.compile(optimizer='adam', loss=tf.keras.losses.CategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
内容的提问来源于stack exchange,提问作者eddy33
相关产品推荐
相关产品推荐

