Одно из ваших изображений - это изображение в градациях серого, а не изображение RGB.Обратите внимание, что help(plt.imread)
говорит (мой акцент):
Возвращаемое значение равно numpy.array
. Для изображений в градациях серого массивом возврата является MxN .Для изображений RGB возвращаемое значение равно MxNx3.
scipy.misc.imresize(image, size=(num_px,num_px))
возвращает массив формы (num_px,num_px)
, а не (num_px,num_px,3)
.Следовательно, массив не может быть преобразован в (1, num_px*num_px*3)
.
(обратите внимание, что 40000 - это ровно треть от 120000).
Чтобы преобразовать все изображения в RGB, вы можете использовать:
from PIL import Image
for i in range(m):
my_image = "Img-"+str(i+1)+".jpg"
fname = "train/train/"+my_image
img = np.asarray(Image.open(fname).convert('RGB'))
X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))
Чтобы сохранить код на будущее, также обратите внимание, что help(scipy.misc.imresize)
говорит (мой акцент):
imresize
устарелов SciPy 1.0.0, и будет удален в 1.2.0. Используйте skimage.transform.resize
вместо .