Вызовите model.fit в Keras для ввода разных форм?

primus спросил: 28 марта 2018 в 02:24 в: python

Я создал CNN с Python и Keras, который сжимает 2D-вход различной длины в один вывод. Все изображения имеют высоту 80 пикселей, но различную длину, например. (80, lenght_of_image_i, 2), где 2 - количество цветных каналов.

У меня есть 5000 изображений, форма массива данных обучения X в numpy равна (5000, 1), а массив имеет объект dtype. Это связано с тем, что сохранение содержимого с другой формой невозможно в одном массиве numpy. Каждый объект в списке имеет форму (80, lenght_of_image_i, 2).

С учетом сказанного, когда я вызываю функцию model.fit (X, y) последовательной модели, я получаю следующую ошибку:

    ValueError: Error when checking input: expected conv2d_1_input to have 4 
    dimensions, but got array with shape (5000, 1)

Преобразование массива numpy в список массивов numpy в Python также не работает:

    AttributeError: 'list' object has no attribute 'ndim'

Нулевые дополнения или преобразования моего данные для получения всех моих изображений в одной и той же форме не являются параметрами.

Теперь мой вопрос: Как я могу вызвать функцию model.fit (X, y), когда мои данные не имеют фиксированной формы?

Заранее спасибо!

Изменить: Заметьте, что у меня нет проблем с архитектурой моей сети (так как я не использую плотные слои). Моя проблема в том, что я не могу вызвать функцию fit из-за проблем с формой массива numpy. Моя модель является репликацией этой сети: http://machine-listening.eecs.qmul.ac.uk/wp-content /uploads/sites/26/2017/01/sparrow.pdf


1 ответ

Есть решение
Daniel Möller ответил: 28 марта 2018 в 03:11

Вам нужно передать"numy arrays", чтобы соответствовать, типа"float". Это единственная возможность.

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

for image, output in zip(images,outputs):
    model.train_on_batch(image.reshape((1,80,-1,2), outputs.reshape((1,)+outputs.shape, ....) 
primus ответил: 28 марта 2018 в 05:08
Спасибо, это решение, которое я искал!