导入ktrain时遇tensorflow.keras无swish属性报错的解决方法
ktrain导入触发swish属性缺失报错
问题描述
导入ktrain库时触发报错:AttributeError: module 'tensorflow_core.keras.activations' has no attribute 'swish',相同代码在Google Colab环境中可以正常运行,完整报错堆栈如下:
AttributeError Traceback (most recent call last) <ipython-input-3-d851226d5f91> in <module> ----> 1 import ktrain 2 from ktrain import text ~/opt/anaconda3/envs/Anmol/lib/python3.7/site-packages/ktrain/__init__.py in <module> 1 from .version import __version__ ----> 2 from . import imports as I 3 from .core import ArrayLearner, GenLearner, get_predictor, load_predictor, release_gpu_memory 4 from .vision.learner import ImageClassLearner 5 from .text.learner import BERTTextClassLearner, TransformerTextClassLearner ~/opt/anaconda3/envs/Anmol/lib/python3.7/site-packages/ktrain/imports.py in <module> 227 logging.getLogger("transformers").setLevel(logging.ERROR) 228 try: --> 229 import transformers 230 except ImportError: 231 warnings.warn("transformers not installed - needed by various models in 'text' module") ~/opt/anaconda3/envs/Anmol/lib/python3.7/site-packages/transformers/__init__.py in <module> 133 134 # Pipelines --> 135 from .pipelines import ( 136 Conversation, 137 ConversationalPipeline, ~/opt/anaconda3/envs/Anmol/lib/python3.7/site-packages/transformers/pipelines.py in <module> 46 import tensorflow as tf 47 ---> 48 from .modeling_tf_auto import ( 49 TF_MODEL_FOR_QUESTION_ANSWERING_MAPPING, 50 TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING, ~/opt/anaconda3/envs/Anmol/lib/python3.7/site-packages/transformers/modeling_tf_auto.py in <module> 49 from .configuration_utils import PretrainedConfig 50 from .file_utils import add_start_docstrings ---> 51 from .modeling_tf_albert import ( 52 TFAlbertForMaskedLM, 53 TFAlbertForMultipleChoice, ~/opt/anaconda3/envs/Anmol/lib/python3.7/site-packages/transformers/modeling_tf_albert.py in <module> 22 import tensorflow as tf 23 ---> 24 from .activations_tf import get_tf_activation 25 from .configuration_albert import AlbertConfig 26 from .file_utils import ( ~/opt/anaconda3/envs/Anmol/lib/python3.7/site-packages/transformers/activations_tf.py in <module> 52 "gelu": tf.keras.layers.Activation(gelu), 53 "relu": tf.keras.activations.relu, ---> 54 "swish": tf.keras.activations.swish, 55 "silu": tf.keras.activations.swish, 56 "gelu_new": tf.keras.layers.Activation(gelu_new), AttributeError: module 'tensorflow_core.keras.activations' has no attribute 'swish'
报错根因
错误并非ktrain本身抛出,触发点在transformers库的加载流程:swish激活函数是TensorFlow 2.2版本才正式集成到keras.activations模块的,你本地conda环境的TensorFlow版本低于2.2,本身不存在这个属性,而当前安装的高版本transformers直接调用了这个不存在的属性,就会触发报错。Google Colab的依赖版本经过兼容性匹配,所以不会出现同类问题。
解决步骤
- 先核查本地TensorFlow版本,执行命令:
pip show tensorflow,确认当前版本号 - 不改动现有TF版本的前提下,直接把transformers降级到适配低版本TF的兼容版本,执行命令:
pip install transformers==4.10.0,这个版本不会强制依赖仅高版本TF才有的swish属性 - 如果可以升级TF版本,直接安装2.6及以上的稳定版TF(适配Python3.7环境),执行命令:
pip install --upgrade tensorflow==2.6.5,安装完成后运行验证代码import tensorflow as tf; print(tf.keras.activations.swish),无报错即说明属性可正常调用 - 补充排查:如果是M系列芯片的Mac搭建的conda环境,检查是否存在旧版tensorflow-macos残留包,残留包会导致keras模块路径错乱,需将所有TF相关旧包卸载干净后再重装适配版本
内容的提问来源于stack exchange,提问作者Anmol Gupta
相关产品推荐
相关产品推荐

