ValueError в модели с несколькими входами - PullRequest
0 голосов
/ 01 мая 2020

Я создаю модель с несколькими входами, в которой я объединяю модель CNN и модель LSTM. Модель lstm содержит последние 5 событий, а CNN содержит изображение последнего события. Оба организованы так, что каждый элемент k в numpy соответствует 5 событиям и соответствующему изображению, как и выходные метки, которые являются «следующим» событием, которое должно быть предсказано моделью.

chanDim = -1
inputs = Input(shape=inputShape)
x = inputs
x = Dense(128)(x)
x = Activation("relu")(x)
x = BatchNormalization(axis=chanDim)(x)
x = Dropout(0.3)(x)
x = Flatten()(x)
x = Activation("relu")(x)
x = BatchNormalization(axis=chanDim)(x)
x = Dropout(0.1)(x)
x = Activation("relu")(x)
model_cnn = Model(inputs, x)

Это создает модель CNN, а следующий код представляет модель LSTM

hidden1 = LSTM(128)(visible)
hidden2 = Dense(64, activation='relu')(hidden1)
output = Dense(10, activation='relu')(hidden2)
model_lstm = Model(inputs=visible, outputs=output)

Теперь, когда я объединяю эти модели и расширяю их, используя простой плотный слой, чтобы сделать мультиклассовое предсказание 14 классов, все входные данные совпадают, и я могу объединить (нет, 10) и (нет, 10) в (нет, 20) для MLP:

x = Dense(14, activation="softmax")(x)
model_mlp = Model(inputs=[model_lstm.input, model_cnn.input], outputs=x)

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

ValueError: Ошибка при проверке цели: ожидается, что плотность_121 в иметь форму (14,), но получил массив с формой (1,)

Знаете ли вы, как это возможно? Если вам нужна дополнительная информация, я рад сообщить, что

1 Ответ

1 голос
/ 01 мая 2020

Ваша цель должна быть (Нет, 14) размерна. с Softmax вы должны в горячем виде кодировать выход

попробуйте это:

y = pd.get_dummies(np.concatenate([y_train, y_test])).values
y_train = y[:len(y_train)]
y_test = y[len(y_train):]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...