如何在CNN模型上正确使用model.predict预测自定义图像
解决CNN模型predict时的输入维度不兼容错误
错误原因分析
你遇到的expected min_ndim=4, found ndim=1错误,核心问题是直接将图片路径字符串传给了模型,而非加载后的图像张量。np.expand_dims(image, axis=0)只是给字符串路径增加了一个维度,得到的是形状为(1,)的字符串数组,完全不符合CNN模型要求的(batch_size, img_height, img_width, channels)四维输入格式。
修正方案
需要先加载图像、预处理成和训练数据一致的格式,再传入模型预测。替换你代码最后4行的内容为以下代码:
# 1. 加载并调整图像尺寸到模型要求的32x32 image = tf.keras.preprocessing.image.load_img( '/Users/anastalib/PycharmProjects/pythonProject1/green.jpeg', target_size=(img_height, img_width) ) # 2. 转换为numpy数组 img_array = tf.keras.preprocessing.image.img_to_array(image) # 3. 添加batch维度(模型要求输入带batch维度) img_array = np.expand_dims(img_array, axis=0) # 执行预测 prediction = model.predict(img_array) print('predictions:', prediction) print(class_names[np.argmax(prediction)])
关键预处理说明
load_img的target_size必须和训练时的image_size一致(这里是32x32),否则输入尺寸不匹配会报错img_to_array将PIL图像转为numpy张量,保证数据格式和训练数据对齐np.expand_dims添加batch维度,因为Keras模型默认接受批量数据输入,即使只预测单张图也要满足(1, 32, 32, 3)的形状要求
内容的提问来源于stack exchange,提问作者Anas
相关产品推荐
相关产品推荐

