Проблемы с размерами массива Python Numpy - PullRequest
0 голосов
/ 29 января 2019

Я борюсь с проблемой, которую просто не могу заставить работать!В настоящее время я работаю с Tensorflow и работал над базовыми уроками .

. Как вы можете видеть из урока, модель нейронной сети ожидает массив Numpy train_images формы (60000, 28, 28) какв обучающем наборе учебного пособия содержится 60000 изображений размером 28x28.Я читаю в наборе данных Flavia, который представляет собой набор изображений листьев.Набор состоит из 1588 изображений с разрешением 300x300 пикселей.Вот мой код:

for root, dirs, files in os.walk(pathname_data):
for name in files:
    img = keras.preprocessing.image.load_img(os.path.join(root,name), color_mode="grayscale",target_size=(300,300))      #get image in 300x300 grayscale
    array = keras.preprocessing.image.img_to_array(img)                                                                 #convert to numpy array
    array = array.squeeze(axis=2)                                                                                       #convert to 300x300 2d array
    array = array / 255.0                                                                                               #preprocess data
    pathSegments = os.path.normpath(os.path.join(root,name)).split(os.sep)                                              #split path
    if pathSegments[len(pathSegments)-3] == "Train":                                                                    #assign to training- or testSet
        #TODO: how to store the 2x2 arrays ?? 
        #store in training set 
    elif pathSegments[len(pathSegments)-3] == "Test":
        #store in test set 

Мой вопрос сейчас, как мне сохранить «массив», чтобы я получил массив Numpy в форме (1588, 300, 300), который я могу передать в свою модель?Я уже пытался поэкспериментировать с reshape, добавить и перенести, но пока безрезультатно :( Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 29 января 2019

Я предполагаю, что каждый 'массив', который вы генерируете из файла, имеет форму (300, 300)

. Вы можете либо предварительно сгенерировать массив и использовать счетчик

all_img = np.empty((1588, 300, 300))
count = 0
for root, dirs, files in os.walk(pathname_data):
    for name in files:
        ...
        all_img[count] = array.copy()
        count += 1
        ...

, либо добавитьвсе изображения в список и позже измените его в массив

all_img = []
for root, dirs, files in os.walk(pathname_data):
    for name in files:
        ...
        all_img.append(array)
        ...
all_img = np.array(all_img)

Оба эти метода дадут вам массив (1588, 300, 300), у меня нет опыта работы с Tensorflow, но вам нужна именно эта форма.

...