运行Keras SimpleRNN时出现NotImplementedError无法转换符号张量为numpy数组
RNN层符号张量转numpy数组报错修复方案
报错信息:NotImplementedError: Cannot convert a symbolic Tensor (simple_rnn_17/strided_slice:0) to a numpy array
该报错为TensorFlow 2.4.x版本的已知兼容性问题,并非仅由numpy版本过高导致,单纯降级numpy无法覆盖所有触发场景,可按以下步骤依次排查修复:
- 修正keras导入路径
不要使用独立安装的keras包,统一使用TensorFlow内置的keras模块,将所有import keras相关的导入语句替换为:
from tensorflow import keras
二者版本不一致时会导致SimpleRNN层的张量切片计算逻辑异常,是该报错的最高发诱因。
- 增加层参数强制计算展开
如果修改导入路径后仍报错,可在SimpleRNN层增加unroll=True参数,强制层在编译阶段展开循环计算,避免运行时生成无法转换的符号张量:
keras.layers.SimpleRNN(1, input_shape=[None, 1], unroll=True)
也可在模型定义前关闭即时执行模式解决:
import tensorflow as tf tf.compat.v1.disable_eager_execution()
- 版本升级兜底
如果以上方案都不生效,直接将TensorFlow升级到2.5及以上正式版本,该bug已在2.5版本被官方修复,配套numpy版本使用1.21.x即可,无需降级numpy。
内容的提问来源于stack exchange,提问作者hafiz031
相关产品推荐
相关产品推荐

