Большая ошибка создания индекса в массиве numpy - PullRequest
0 голосов
/ 09 июня 2018

У меня есть папка поезда, в которой у меня есть 13000 изображений животных.Я хочу использовать глубокую нейронную сеть для их обучения.Но изображения имеют разные размеры, поэтому я запускаю следующий код, чтобы получить массив n.

for i in range(m):
  my_image = "Img-"+str(i+1)+".jpg"
  fname = "train/train/"+my_image
  image = plt.imread(fname)
  X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))

Это прекрасно работает для значений от m до 1000. Но когда m = 13000, размер моегообучающий набор, он выдает следующую ошибку

ValueError                                Traceback (most recent call last)
<ipython-input-41-c214b5b43e33> in <module>()
      3     fname = "train/train/"+my_image
      4     image = plt.imread(fname)
----> 5     X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))
ValueError: cannot reshape array of size 40000 into shape (1,120000)

Здесь imresize () должен изменить размер изображения до желаемого размера.Мое значение num_px - 256. Любая помощь будет весьма полезна

1 Ответ

0 голосов
/ 09 июня 2018

Одно из ваших изображений - это изображение в градациях серого, а не изображение 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 вместо .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...