Несоответствие формы набора данных входному слою Conv1D - PullRequest
1 голос
/ 02 июля 2019

Попытка настроить слой Conv1D в качестве входного слоя в кератах.

Набор данных имеет 1000 временных шагов, и каждый временной шаг имеет 1 особенность.

Прочитав кучу ответов, я изменил свой набор данных в следующий формат (n_samples, временные шаги, функции), что соответствует следующему в моем случае:

train_data   = (78968, 1000, 1)
test_data    = (19742, 1000, 1)
train_target = (78968,)
test_target  = (19742,)

Позже я создаю и компилирую код, используя следующие строки

model = Sequential()
model.add(Conv1D(64, (4), input_shape = (1000,1) ))

model.add(MaxPooling1D(pool_size=2))
model.add(Dense(1))
optimizer = opt = Adam(decay = 1.000-0.999)
model.compile(optimizer=optimizer,
              loss='mean_squared_error',
              metrics=['mean_absolute_error','mean_squared_error'])

Затем я пытаюсь уместить, обратите внимание, что train_target и test_target - это серии панд, поэтому я вызываю DataFrame.values ​​для преобразования в массив numpy, я подозреваю, что там может быть проблема?

training = model.fit(train_data, 
                 train_target.values,
                 validation_data=(test_data, test_target.values),
                 epochs=epochs,
                 verbose=1)

Модель компилируется, но я получаю сообщение об ошибке, когда пытаюсь соответствовать

Error when checking target: expected dense_4 to have 3 dimensions, 
but got array with shape (78968, 1)

Я пробовал каждую комбинацию изменения данных и не могу заставить это работать.

Раньше я использовал керасы с плотными слоями только для другого проекта, где вместо input_shape был указан конкретный input_dimension, поэтому я не уверен, что я делаю здесь неправильно. Я прочитал почти каждый вопрос о переполнении стека о проблемах формы данных, и я боюсь, что проблема в другом месте, любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 02 июля 2019

Под строкой model.add(MaxPooling1D(pool_size=2)) добавьте одну строку model.add(Flatten()), ваша проблема будет решена. Функция Flatten поможет вам преобразовать ваши данные в правильную форму, пожалуйста, посетите этот сайт для получения дополнительной информации https://www.tensorflow.org/api_docs/python/tf/keras/layers/Flatten

...