这些天我越来越熟悉CNN和tensorflow(通过猫/狗分类问题(,在编写预测函数时,我意识到代码使用了expand_dims,我无法解释[1]。
当我能够获得所需的(150,150,3(上传图像数组时,为什么我不能将其馈送到预测函数? 我训练/验证的图像也具有相同的大小(150,150,3(。添加这个额外的(1, 150, 150, 3(到底有什么帮助???
提前非常感谢,
[1]
import numpy as np
from google.colab import files
from keras.preprocessing import image
uploaded=files.upload()
for fn in uploaded.keys():
# predicting images
path='/content/' + fn
img=image.load_img(path, target_size=(150, 150))
x=image.img_to_array(img)
x=np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images, batch_size=10)
print(classes[0])
if classes[0]>0.5:
print(fn + " is a dog")
else:
print(fn + " is a cat")
图像开头的额外维度通常适用于批量大小。批量大小表示您一次捆绑多少图像以馈送 CNN。批处理也可以是单个图像,但它仍然需要额外的维度 1 来显示批处理的大小。例如,如果批大小为 5,则输入数组的形状为(5, 150, 150, 3)
该函数将维度添加到 numpy 数组。你加载图像并得到一个形状(150, 150, 3)
数组,在第 0 轴调用expand_dims
后,你得到形状(1, 150, 150, 3)
。