环境:
tensorflow:2.1
keras:2.3.1
因为偶尔就会出现这些问题,每次都得重新搜索解决方案很麻烦,所以在此记录一下,持续更新
以下报错的原因是由于keras版本变动导致广播方式不一样
报错:
使用Keras实现Attention注意力时报错维度不匹配,报错位置是a = K.permute_dimensions(a, (0, 3, 2, 1))
ValueError: Dimension must be 5 but is 4 for ‘{{node attention_11/transpose_4}} = Transpose(attention_11/truediv, attention_11/transpose_4/perm)’ with input shapes: [?,8,?,8,?], [4]
将原句:
A = K.batch_dot(Q_seq, K_seq, axes=[3, 3]) / self.size_per_head ** 0.5
改为:
A = tf.einsum('bjhd,bkhd->bhjk', Q_seq, K_seq)/ self.size_per_head ** 0.5
将原句:
O_seq = K.batch_dot(A, V_seq, axes=[3, 2])
改为:
O_seq = tf.einsum('bhjk,bkhd->bjhd', A, V_seq)
以下报错的原因是python代码是基于TensorFlow1.0+的,而系统中的TensorFlow版本为2.0+
报错:
AttributeError: module ‘tensorflow’ has no attribute ‘ConfigProto’
将原句:
config = tf.ConfigProto()
改为:
config = tf.compat.v1.ConfigProto()
报错:
RuntimeError: set_session is not available when using TensorFlow 2.0.
将原句:
KTF.set_session(session)
改为:
tf.compat.v1.keras.backend.set_session(session)
报错:
AttributeError: module ‘tensorflow’ has no attribute ‘Session’
将原句:
sess = tf.Session()
改为:
sess = tf.compat.v1.Session()
报错:
TypeError: init() got an unexpected keyword argument ‘syntax’
通过以下命令解决:
conda install -c conda-forge protobuf
报错:
ImportError: No module named tensorboard.plugins
原因是tensorflow版本太低(0.1),安装tensorflow 1.0版本解决