@创建于:2022.09.30
@修改于:2022.09.30
1、错误信息
我使用tensorflow==2.8.0 (keras==2.8.0),keras-contrib 2.0.8。keras_contrib的CRF 报错
crf, idx = y_pred._keras_history[:2]
AttributeError: 'Tensor' object has no attribute '_keras_history'
2、解决办法 降低keras版本
这个问题的产生,不是因为输入数据是ndarray格式原因造成的,也没有必要强制把ndarray转成keras的tensor。
这是由于高版本的tensorflow(keras)不支持keras-contrib 造成的。因此降低版本号tensorflow==2.2.0,(keras==2.3.1)
keras_contrib是keras的一个高级网络实现模块,里面包含了用keras实现的CRF等高级网络层和相关算法。keras-contrib是2018年开发的,对TensorFlow新版本不兼容是可以理解。
我使用下面的安装包,再次运行通过。
# python 3.7.12
tensorflow==2.2.0
# numpy必须在1.20以下
numpy==1.19.2
pandas==1.0.5
scikit-learn==0.24.1
keras-contrib==2.0.8
# protobuf 必须3.20以下
protobuf==3.19.0
pip install git+https://www.github.com/keras-team/keras-contrib.git
3、其他解决办法
@HGamalElDin, We do not need to downgrade any of the versions. Can utilize tensorflow-add to build CRF layer. Hope this helps :)
`
from tensorflow_addons.layers import CRF
x = ....
crf_layer = CRF(n_tags)
_, output_layer, _, _ = crf_layer(x)
model = Model(input_layer, output_layer)
mode.summary()
AttributeError: ‘Tensor’ object has no attribute ‘_keras_history’ #14464
我的疑问是tensorflow_addons里面的损失函数并没有crf_loss,crf_accuracy。用其他损失函数代替,合适吗?【求大佬赐教】