Несоответствие ожидаемых форм Keras после объединения - PullRequest
1 голос
/ 26 июня 2019

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

Я хочу использовать 1D CNN для выполнения регрессии на некоторых данных временных рядов. Мой тензор входных объектов имеет форму N x T x D, где N - количество точек данных, T - количество последовательностей, а D - количество измерений. Мой целевой тензор имеет форму N x T x 1 (1, потому что я пытаюсь вывести скалярное значение).

Я настроил свою модель архитектуры следующим образом:

feature_tensor.shape
# (75584, 40, 38)
target_tensor.shape
# (75584, 40, 1)

inputs = Input(shape=(SEQUENCE_LENGTH,DIMENSIONS))
conv1 = Conv1D(filters=64, kernel_size=3, activation='relu')
x = conv1(inputs)
x = MaxPooling1D(pool_size=2)(x)
x = Flatten()(x)
x = Dense(100, activation='relu')(x)
predictions = Dense(1, activation="linear")(x)
model = Model(inputs, predictions)
opt = Adam(lr=1e-5, decay=1e-4 / 200)
model.compile(loss="mean_absolute_error", optimizer=opt)

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

r = model.fit(cleaned_tensor, target_tensor, epochs=100, batch_size=2058)

ValueError: Ошибка при проверке целевого объекта: ожидается, что плотность_доступна 2 размеры, но получил массив с формой (75584, 40, 1).

Первые два числа знакомы: 75584 - это число выборок, 40 - длина последовательности.

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

enter image description here

Однако мы с коллегой долго смотрели на код и не могли понять, почему форма (75584, 40, 1) была получена через архитектуру, когда она достигла плотного слоя.

Может ли кто-нибудь указать мне, что я делаю неправильно?

1 Ответ

1 голос
/ 26 июня 2019

Попробуйте изменить целевую переменную до N x T, и похоже, что ваш конечный плотный слой должен быть 40, а не 1 (я думаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...