Как конвертировать 3D массив в 2D в python? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть папка с 2890 изображениями сжатия tiff lzw в качестве меток для использования в глубоком обучении (у меня есть 2 класса, 1 и 2). Я хочу подготовить их в качестве входных данных модели, которая нуждается в 2D-массиве. поэтому я использую библиотеку imread() из skimage.io, чтобы прочитать их как список из 2890 numpy массивов (Y), а затем преобразовать список в nd.array (Y_train). теперь у меня Y_train по 3 измерениям (2890, 224, 224), что 224, 224 - размер входных изображений. Теперь мне нужно преобразовать этот 3D-массив в 2D-массив как (2890,2), в котором 2 показывает номер класса.

  1. Я использовал Y_train.reshape(2890,2) и получил эту ошибку: ValueError: cannot reshape array of size 145008640 into shape (2890,2).

  2. также я использовал to_categorical из keras.utils и получил 4D Arry как (2890, 224, 224, 3).

Как можно Я конвертирую 3D-массив (2890, 224, 224) в 2D-массив (2890,2)?

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Я думаю, у вас очень неправильное представление об операции изменения формы. Операция изменения формы гарантирует, что количество элементов в матрице / векторе будет одинаковым независимо от того, что.

Таким образом, вы можете изменить форму матрицы только с (A, B, C, D) до (A, E) iff B x C x D = E.

У вас есть два разных массива: X с формой (-1, 224, 224) и Y с формой (-1, 2). Вы не можете просто изменить их, вы должны прочитать изображения как массив numpy и для каждого изображения добавить метку в другой массив numpy, после чего вы можете применить to_categorical (Keras) или LabelEncoder (scikit-learn).

Воспользуйтесь некоторыми онлайн-ресурсами, чтобы получить представление о чтении меток: Tensorflow считывает изображения с метками

0 голосов
/ 13 марта 2020

Если вы хотите изменить его на (2890, 224 * 224), вы можете сделать это, поместив -1 в измерение, которое вы хотите заменить старыми измерениями. например, np.reshape(2890, -1)

...