TensorFlow 2.5.0与NumPy 1.21+不兼容导致Keras数据增强报错问询
错误原因
该报错并非代码编写错误导致,是TensorFlow与NumPy版本不兼容引发的问题。你当前使用的TensorFlow 2.5.0仅适配1.19.x版本的NumPy,NumPy 1.20及以上版本对Tensor类型的处理逻辑做了调整,与2.5及更早版本TensorFlow内置的Keras预处理层存在适配冲突。Google Colab可正常运行是因为其默认环境的TensorFlow、NumPy为官方测试过的匹配组合,不存在版本不兼容问题。
解决方案
你可根据自身需求选择任意一种方案解决:
- 方案1:降级NumPy到兼容版本
直接执行以下命令安装1.19.5版本NumPy,安装完成后重启运行环境即可,原有代码无需修改:pip install numpy==1.19.5 - 方案2:升级TensorFlow到适配高版本NumPy的版本
TensorFlow 2.6及以上稳定版本已修复与NumPy 1.20+的兼容问题,直接升级TensorFlow即可,你现有代码用到的API无破坏性变更,升级后可直接运行:pip install tensorflow==2.10.0 - 方案3:不改动现有环境,调整数据增强实现逻辑
若不想修改现有环境的依赖版本,可将数据增强逻辑从Keras模型中抽离,放到tf.data.Dataset的预处理流水线中实现,调整后原模型可删除嵌入的data_augmentation层,绕开版本兼容问题,示例代码如下:import tensorflow as tf import tensorflow_addons as tfa import numpy as np def augment_func(image, label): # 随机水平翻转 image = tf.image.random_flip_left_right(image) # 随机±15度旋转 rotate_angle = tf.random.uniform(shape=[], minval=-15, maxval=15, dtype=tf.float32) image = tfa.image.rotate(image, rotate_angle * np.pi / 180, interpolation='bilinear') return image, label # 仅对训练集做增强,验证集保持原有处理逻辑 augmented_train_ds = normalized_train_ds.map(augment_func, num_parallel_calls=tf.data.AUTOTUNE) # 训练时传入增强后的数据集 history_2 = model_2.fit( augmented_train_ds, validation_data = normalized_val_ds, epochs = epochs_2 )
内容的提问来源于stack exchange,提问作者AndrewJaeyoung
相关产品推荐
相关产品推荐

