Многозадачное обучение в Керасе

У меня есть два разных набора данных, и я хотел бы попробовать многозадачное обучение. Моя проблема в том, что во всех примерах, которые я смог найти, есть два разных входа для обучения, но метки одинаковые. У меня вопрос: могу ли я иметь разные ярлыки? Это мой код прямо сейчас:

input1 = Sequential()
input1.add(Embedding(vocabulary_size, embedding_size, 
input_length=longest_sen_input1))
input1.add(Bidirectional(LSTM(units=embedding_size)))
input1.add(Dense(len(document), activation='softmax'))

input2 = Sequential()
input2.add(Embedding(vocabulary_size, embedding_size, 
input_length=longest_sen_input2))
input2.add(Bidirectional(LSTM(units=embedding_size)))
input2.add(Dense(len(document), activation='softmax'))

model = Sequential()
model.add(Merge([input1, input2], mode='sum'))
model.add(Dense(len(document), activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='adam')

model.fit([X_train_input1, X_train_input2], [Y_train_input1, Y_train_input2], epochs=100)

Я пытаюсь вставить [Y_train_input1, Y_train_input2], но у меня есть эта ошибка:

Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 2 arrays: [array([[0., 0., 0., ..., 0., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0.],
   ...,
   [0., 0., 0., ..., 1., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0....

Кто-нибудь знает, как выполнить многозадачное обучение с двумя входами (X_train_input1/Y_train_input1 и X_train_input2/Y_train_input2), возвращая общий прогноз?

РЕДАКТИРОВАТЬ Моя модель, кажется, работает сейчас, я просто изменил

model.fit([X_train_input1, X_train_input2], [Y_train_input1, Y_train_input2], epochs=100)

в

model.fit([X_train_input1, X_train_input2], Y_train, epochs=100)

но потом я пытаюсь проверить модель, как это

multitask_model.predict_classes(X_test)

и у меня есть эта ошибка:

ValueError: Error when checking model : the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead got the following list of 1 arrays: [array([[  0,   0,   0, ...,  13,   8, 134],
   [  0,   0,   0, ...,  33,  87,  19],
   [  0,   0,   0, ...,  27,   1,   4],
   ...,
   [  0,   0,   0, ...,   1,  10,   8],
   [  0...

Что мне не хватает?

1 ответ

Решение

Ваша модель имеет только один выход, а вы передаете два: Y_train_input1, Y_train_input2,

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

Вы намерены действительно иметь две разные модели без какого-либо взаимодействия между ними?

  • Либо у вас есть общий выход и общий Y_train, или же
  • У вас есть два отдельных выхода и две разные цели.

Я решил ту же проблему с помощью этого y_pred = model.predict([X_test,X_test]).argmax(axis=1) вам нужно передать два массива вместо одного

Другие вопросы по тегам