使用Bert预训练模型做意图分类触发InputSpec类型不匹配TypeError
BERT意图分类InputSpec报错解决方案
报错根因
你遇到的报错核心是bert-for-tf2库和当前安装的TensorFlow/Keras版本不兼容:库内部导入的InputSpec类和你代码中使用的TensorFlow自带Keras的InputSpec类不属于同一实例,所以即使返回值看起来是InputSpec对象,依然无法通过类型校验。
可行解决方法
- 方案1:安装兼容的版本组合
bert-for-tf2当前稳定适配TensorFlow 2.3~2.4版本,直接执行以下命令安装对应版本即可:
pip install tensorflow==2.4.0 keras==2.4.3
- 方案2:修改库源码适配现有环境
打开报错提示的路径~\Anaconda3\lib\site-packages\bert\transformer.py,定位到第209行,将代码中的
self.input_spec = keras.layers.InputSpec(shape=input_shape)
修改为:
self.input_spec = tf.keras.layers.InputSpec(shape=input_shape)
保证InputSpec的导入路径和你代码中使用的Keras路径统一。
- 方案3:升级
bert-for-tf2到最新版本
该兼容性问题已经在新版本的库中修复,直接升级即可:
pip install --upgrade bert-for-tf2
注意事项
代码中所有Keras相关导入需要统一路径,不要混用import keras和import tensorflow.keras as keras两种写法,避免反复出现类实例匹配错误。
内容的提问来源于stack exchange,提问作者moin
相关产品推荐
相关产品推荐

