Keras / Tensorflow Conv1D ожидаемая форма ввода - PullRequest
0 голосов
/ 02 мая 2019

Я хочу применить одномерную свертку к моим 29 входным данным объекта (как в форме 29x1).Я говорю Керасу, что input_shape=(29,1), но я получаю сообщение об ошибке, что ожидалось, что вход «будет иметь 3 измерения, но получит массив с формой (4000, 29)». Почему Keras ожидает 3 измерения?

В документах Keras приведен странный пример использования input_shape:

(None, 128) для последовательностей переменной длинысо 128 функциями на шаг.

Я не уверен, что они подразумевают под последовательностью переменной длины, но так как у меня есть 29 функций, я также попробовал (None,29) и (1,29) и получил похожие ошибки сте.

Не понимаю ли я что-то о том, что делает одномерная свертка?

Вот визуальное описание того, что я ожидаю от Conv1D с размером ядра 3, учитывая ввод 7x1.

[x][x][x][ ][ ][ ][ ]
[ ][x][x][x][ ][ ][ ]
[ ][ ][x][x][x][ ][ ]
[ ][ ][ ][x][x][x][ ]
[ ][ ][ ][ ][x][x][x]

1 Ответ

2 голосов
/ 02 мая 2019

Почему Керас ожидает 3 измерения?

Три измерения (batch_size, feature_size, channel).

Определить слой 1D Conv

Conv1D(32, (3), activation='relu' , input_shape=( 29, 1 ))

Подача (4000, 29, 1) образцов на этот слой.

Простой пример:

from keras import models, layers
import numpy as np

x = np.ones((10, 29, 1))
y = np.zeros((10,))
model = models.Sequential()
model.add(layers.Conv1D(32, (3), activation='relu' , input_shape=( 29,1)))
model.add(layers.Flatten())
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer= "adam", metrics=['accuracy'])
print(model.summary())
model.fit(x,y)
...