входные размеры в одномерную сверточную сеть в кератах

действительно трудно понять входные размеры для сверточного 1dслой в керасе:

Форма ввода

3D тензор с формой: (образцы, шаги, input_dim).

Форма выхода

3D тензор с формой: (сэмплы, new_steps, nb_filter). значение шагов могло измениться из-за заполнения.

Я хочу, чтобы моя сеть брала временные ряды цен (101 по порядку) и выводила 4 вероятности. Моя текущая не сверточная сеть, которая делает это довольно хорошо (с набором обучения 28000), выглядит следующим образом:

standardModel = Sequential()
standardModel.add(Dense(input_dim=101, output_dim=100, W_regularizer=l2(0.5), activation='sigmoid'))
standardModel.add(Dense(4, W_regularizer=l2(0.7), activation='softmax'))

Чтобы улучшить это, я хочу создать карту объектов из входного слоя, который имеет локальное поле восприятия длины 10. (и, следовательно, имеет 10 общих весов и 1 общее смещение). Затем я хочу использовать максимальное объединение и передать его скрытому слою из 40 или около того нейронов, а затем вывести это с 4 нейронами с softmax во внешнем слое.

картинка (это очень ужасно извините!)

Так что в идеале сверточный слой должен иметь двумерный тензор измерений:

(minibatch_size, 101)

и вывести трехмерный тензор размеров

(миниатюрный_размер, 91, no_of_featuremaps)

Однако слой keras, похоже, требует измерения на входе, называемого step. Я пытался понять это и до сих пор не совсем понял. В моем случае, должен ли шаг быть 1, поскольку каждый шаг в векторе является увеличением времени на 1? Кроме того, что такое new_step?

Кроме того, как превратить выходные данные объединенных слоев (трехмерный тензор) во входные данные, подходящие для стандартного скрытого слоя (то есть слоя с плотным керасом) в виде двумерного тензора?

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

conv = Sequential()
conv.add(Convolution1D(64, 10, input_shape=(1,101)))
conv.add(Activation('relu'))
conv.add(MaxPooling1D(2))
conv.add(Flatten())
conv.add(Dense(10))
conv.add(Activation('tanh'))
conv.add(Dense(4))
conv.add(Activation('softmax'))

Строка conv.Add (Flatten ()) выбрасывает диапазон, превышающий допустимую ошибку границ. Интересно, что эта ошибкане брошенный только для этого кода:

conv = Sequential()
conv.add(Convolution1D(64, 10, input_shape=(1,101)))
conv.add(Activation('relu'))
conv.add(MaxPooling1D(2))
conv.add(Flatten())

дела

print conv.input_shape
print conv.output_shape

результаты в

(None, 1, 101
(None, -256)

возвращается

Обновление 2:

Изменено

conv.add(Convolution1D(64, 10, input_shape=(1,101)))

в

conv.add(Convolution1D(10, 10, input_shape=(101,1))

и это начало работать. Тем не менее, есть ли какие-либо важные различия между вводом (Нет, 101, 1) в 1-мерный слой или (Нет, 1, 101), о которых я должен знать? Почему (None, 1, 101) не работает?

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

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