Tensor转NumPy数组报错,寻求无需降级NumPy的解决方法
解决TensorFlow 2.3.0与NumPy 1.23兼容报错问题
问题描述
执行以下代码的第三行时出现报错:
sequence_input = Input(shape=(max_len,), dtype="int32") embedded_sequences = Embedding(vocab_size, 128, input_length=max_len, mask_zero=True)(sequence_input) lstm = Bidirectional(LSTM(64, dropout=0.5, return_sequences=True))(embedded_sequences)
报错信息:
Cannot convert a symbolic Tensor (bidirectional/forward_lstm/strided_slice:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported
由于需要使用featuretools,必须保持NumPy版本在1.21及以上,无法降级到1.20以下,当前TensorFlow版本为2.3.0、NumPy版本为1.23,寻求无需降级NumPy的修复方法。
可行解决方案
- 升级TensorFlow版本:TensorFlow 2.3.0对NumPy 1.21+的兼容性较差,官方从2.5.0版本开始正式适配NumPy 1.21及以上版本,升级到2.5.0或更高版本(如2.6.x、2.7.x)可直接解决符号张量转NumPy数组的兼容性问题,同时满足featuretools对NumPy版本的要求。
- 显式指定LSTM层数据类型:在创建LSTM层时显式设置
dtype=tf.float32,避免隐式类型转换触发NumPy的调用逻辑,修改后的代码如下:lstm = Bidirectional(LSTM(64, dropout=0.5, return_sequences=True, dtype=tf.float32))(embedded_sequences) - 禁用TensorFlow与NumPy的自动互操作:在代码开头添加配置,强制TensorFlow使用自身张量操作,绕过NumPy的转换逻辑:
注意:该方法可能影响部分依赖TensorFlow与NumPy互操作的代码,需在业务场景中测试验证。import tensorflow as tf tf.config.experimental.set_numpy_behavior(enable=False)
内容的提问来源于stack exchange,提问作者I guaranteed
相关产品推荐
相关产品推荐

