Keras Model Network 3D-вход для 2D-выхода - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть 3D-вход (образцы, шаги, функции).Таким образом, каждый образец имеет цепочку шагов, которые имеют разные особенности.Теперь я хочу получить 2D-вывод (сэмплы, шаги), где у меня есть сэмплы, а на каждом шаге сэмпла вычисляется 0 или 1 из модели.

Так что я думаю, что это проблема последовательной двоичной классификации.У меня есть некоторые трудности с определением модели, особенно с выходным слоем.

Вот фигуры массивов-пустышек:

x_train.shape 
# (200, 1657, 669)

x_test.shape
# (41, 1657, 669)

y_train.shape
# (200, 1657)

y_test.shape
# (41, 1657)

Я пробовал эту модель, но результат был не тот, который был у меняожидая

n_residues, n_features, n_outputs = trainX.shape[1], trainX.shape[2], trainy.shape[1]
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(n_residues,n_features)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.1))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit network
model.fit(trainX, trainy, epochs=epochs, batch_size=batch_size, verbose=verbose)
m_classes = model.predict_classes(x_test, verbose=0)
print(m_classes)
[  36   36   59   32   16   32   36  804 1047   16   16   36   32   36
   36   36   16   16   16   16   16   16   36   16   36   36   36   16
   59   36   36   36   16   16   16  804   16   16   16   36   36]

Выходной сигнал представляет собой длинный вектор 41 для 41 выборки в тестовом наборе с классами 0 -1657, я полагаю.

Мой желаемый выход для тестового набора будетбыть 41 двоичным вектором длиной 1657.

Спасибо!

1 Ответ

2 голосов
/ 22 апреля 2019

Когда вы имеете дело с Conv1D, RNN или моделями последовательностей, вывод может быть один к одному, много к одному, (или) много ко многим. В этом случае модель действует много к одному. Обычно в Керасе есть параметр return_sequence или stateful. Если эти параметры False , то ваша модель будет вести себя как много к одному . (то есть .., форма вывода - (batch_size, unit_length). В этом случае длина единицы является выходом). Чтобы сделать модель many to many, результат должен быть таким: (batch_size, time_step, unit_length) . Просто инициализация stateful==True поможет вам решить эту проблему.

некоторые полезные ссылки для понимания о выходных данных последовательности
Понимание LSTM
Кормление одного прогноза за другим

проверьте официальную документацию по инициализации conv1D и установите параметр stateful = True . Это теоретическая идея, лежащая в основе LSTM или Conv1D. Эти ссылки помогут вам получить идею архитектуры за LSTM.

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