You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:27:13