Поэтому, если этот ответ в порядке, отметьте его как ответивший, чтобы другие пользователи могли получить пользу от этого вопроса и ответа.

ренировочные данные имеют вид (?, 15) где? переменная длина

При создании моей модели я указываю это:

inp = Input(shape=(None,15))
conv = Conv1D(32,3,padding='same',activation='relu')(inp)
...

Мои тренировочные данные имеют форму (35730,?, 15).

Проверяя это в Python я получаю:

X.shape

Выходы: (35730,)

X[0].shape

Выходы: (513, 15)

Когда я пытаюсь вписать свою модель в свои тренировочные данные, я получаю ValueError:

Error when checking input: expected input_1 to have 3 dimensions, but got array with shape (35730, 1)

Я могу тренировать свою модель только с помощью model.train_on_batch () на одном примере.

Как я могу решить это? Кажется, что Керас думает, что форма моих входных данных (35730, 1), когда это на самом деле (35730,?, 15)

Это ошибка в керасе или я что то не так сделал?

Я использую бэкэнд тензорного потока, если это имеет значение. Это Керас 2

Ответы на вопрос(1)

Решение Вопроса

где они разместили эту ссылку:https://github.com/fchollet/keras/issues/1920)

ТвойX это не один массив numpy, это массив массивов. (В противном случае его форма будетX.shape=(35730,513,15).

Это должен быть один массив дляfit метод. Поскольку у вас переменная длина, у вас не может быть одного массива, содержащего все ваши данные, вам придется разделить его на меньшие массивы, каждый из которых содержит данные одинаковой длины.

Для этого вам, возможно, следует создать словарь по форме и зациклить словарь вручную (могут быть другие лучшие способы сделать это ...):

#code in python 3.5
xByShapes = {}
yByShapes = {}
for itemX,itemY in zip(X,Y):
    if itemX.shape in xByShapes:
        xByShapes[itemX.shape].append(itemX)
        yByShapes[itemX.shape].append(itemY)
    else:
        xByShapes[itemX.shape] = [itemX] #initially a list, because we're going to append items
        yByShapes[itemX.shape] = [itemY]

В конце вы зацикливаете этот словарь для обучения:

for shape in xByShapes:
    model.fit(
              np.asarray(xByShapes[shape]), 
              np.asarray(yByShapes[shape]),...
              )
маскировка

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

Затем, прежде чем что-либо в вашей модели вы можете добавитьMasking слой, который будет игнорировать эти дополненные сегменты. (Предупреждение: некоторые типы слоев не поддерживают маскирование)

 Daniel Möller11 сент. 2017 г., 14:58
Это здорово знать !! - По этой ссылке я обновил свой ответ.
 user353701411 сент. 2017 г., 14:04
Сверточные слои не должны требовать статической формы ввода (кроме числа каналов), и моя сеть полностью сверточна.github.com/fchollet/keras/issues/1920 Вы можете прочитать больше об этом материале здесь. Мне нужны мои данные, чтобы иметь переменную длину. Ранее я использовал сверточные сети с изображениями разных размеров, и это работало безупречно. Я буду больше возиться с этим сегодня, плохо отвечу, если найду решение!
 user353701411 сент. 2017 г., 16:05
Большое спасибо! Действительно ценю это! Теперь я полностью понимаю, почему не работает пакетное обучение
 Daniel Möller11 сент. 2017 г., 16:26
Поэтому, если этот ответ в порядке, отметьте его как ответивший, чтобы другие пользователи могли получить пользу от этого вопроса и ответа.

Ваш ответ на вопрос