Преобразовать список из 14 массивов в один массив (ошибка значения Keras) - PullRequest
0 голосов
/ 11 октября 2019

Я получаю следующее сообщение об ошибке Keras Value, когда пытаюсь обучить свою модель.

ValueError: Ошибка при проверке цели модели: список массивов Numpy, которые вы передаете своей модели, не являетсяРазмер ожидаемой модели. Ожидается увидеть 1 массив (ов), но вместо этого я получил следующий список из 14 массивов:

   [array([['0'],
           ['0'],
           ['0'],
           ['0'],
           ['0'],
           ['0'],
           ['0'],
           ['0'],
           ['1'],
           ['0'],
           ['0'],
           ['0'],
           ['0'],
           ['0'],
       ...

Когда я пытаюсь изменить форму y_col, используя:

y_col = np.stack( y_col, axis=0 )

, я получаю:

TypeError: If class_mode="multi_output", y_col must be a list. Received ndarray.

, если я просто пытаюсь сделать это с

y_col = np.array(y_col)

Я получаю ту же ошибку.

Фрейм данных:

      Path    black  grey  green blue   etc....
0  12345.jpg    1      0       1  0
1  12345.jpg    0      0       1  0
2  12345.jpg    1      0       0  1
3  12345.jpg    0      1       0  1
4  12345.jpg    0      0       1  1
5  12345.jpg    0      0       1  1

Модель для каждого изображения должна представлять собой один массив из 14 элементов [0,0,1,1,0,1,0, ...], но, похоже, вы передаете 14 разных массивов для каждого изображения.

Проблема возникает в сети CNN, которая распознает цвета продуктов (одежды). Один продукт может иметь более одного цвета, например [0.0,0,1,0,1,0,0,1]

изначально y_col выглядит:

['beige',
 'black',
 'blue',
 'brown',
 'gray',
 'green',
 'multicolor',
 'orange',
 'pink',
 'red',
 'violet',
 'white',
 'yellow',
 'transparent']

генератор:

def get_generator(filename, number=None):
    # 
    df = pd.read_csv(filename, delimiter=' ', names=color_list, dtype="str")
    if number:
        df = df[:number]
    # 
    gen = image.ImageDataGenerator()
    # 
    directory = os.path.dirname(filename)
    # 
    return gen.flow_from_dataframe(df, directory, "path", y_col = y_col , target_size=(224, 224), batch_size=32,class_mode="multi_output")

1 Ответ

2 голосов
/ 11 октября 2019

y_col - это список, содержащий массив numpy.

y_col = [np.array([['0'], 
                   ['0'], 
                   ['0'], 
                   ['0'], 
                   ['0'], 
                   ['0'], 
                   ['0'], 
                   ['0'], 
                   ['1']])]

Использование:

 y_new  = y_col[0].flatten()
 y_new = [int(y) for y in y_new]   

ИЛИ в одну строку:

 y_new = [int(y) for y in y_col[0].flatten()]  

Выход:

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