TensorFlow2.5猫狗分类任务执行cnn.fit报__array__参数错误求助
错误根因排查
该报错与CUDA版本无关,属于numpy 1.21.0 与 tensorflow 2.5.0 依赖的图像处理工具链版本不兼容问题:
tensorflow 2.5.0 正式发布时适配的numpy最高版本为1.19.x,1.21.0版本numpy调整了__array__方法的传参规则,旧版本keras_preprocessing调用np.asarray()将Pillow图像转为数组时,传参逻辑不匹配高版本numpy的要求,最终触发参数数量错误。
可行解决方案
优先选择第一种方案,改动最小兼容性最高:
- 方案1:降级numpy到适配版本
执行命令:pip install numpy==1.19.5
安装完成后重启代码运行内核,重新执行训练代码即可正常运行。 - 方案2:升级图像处理依赖包适配高版本numpy
不想降级numpy的情况下,升级keras_preprocessing和Pillow到兼容版本即可,执行命令:pip install --upgrade keras_preprocessing pillow==9.1.0
注意不要使用9.2及以上版本的Pillow,否则会和tensorflow 2.5.0产生新的兼容性问题。 - 方案3:临时修改数据生成器配置(无需修改依赖版本)
在你的ImageDataGenerator生成训练/测试集的代码中,新增dtype='float32'参数,强制指定数据类型避免numpy传参冲突,示例如下:
train_datagen = ImageDataGenerator(rescale=1./255) training_set = train_datagen.flow_from_directory( 'your_train_data_path', target_size=(64, 64), batch_size=32, class_mode='binary', dtype='float32' # 新增该行配置 ) # 测试集生成代码也同步添加dtype参数
内容的提问来源于stack exchange,提问作者Krishna Sahu
相关产品推荐
相关产品推荐

