【问题标题】:Multitask learning in KerasKeras 中的多任务学习
【发布时间】:2019-04-20 12:47:53
【问题描述】:

我有两个不同的数据集,我想尝试多任务学习。我的问题是我能找到的所有示例都有两个不同的训练输入,但标签是相同的。我的问题是:我可以有不同的标签吗?这是我现在的代码:

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...

我错过了什么?

【问题讨论】:

  • 您可以使用 keras 函数式 API (keras.io/getting-started/functional-api-guide)。
  • 你好@Maria,因为你创建了一个接受两个输入的模型,它总是接受两个输入(X1 和 X2)。我不确定你的意图,如果你真的想要两个不同的并行模型来预测一个结果,或者你可能试图通过使用两次来简单地加速一个模型。无论如何,您的训练和预测应该遵循相同数量的输入和输出。 (除非您构建更多模型来获取这些模型的一部分)
  • 我认为也许您应该创建一个详细的问题,准确说明您对每个模型的期望,它们是相同还是不同,为什么您尝试与训练进行不同的预测等等。跨度>
  • 感谢您的帮助!我会这样做的!

标签: python keras neural-network


【解决方案1】:

我用这个y_pred = model.predict([X_test,X_test]).argmax(axis=1)解决了同样的问题 你必须传递两个数组而不是一个

【讨论】:

    【解决方案2】:

    您的模型只有一个输出,而您传递了两个:Y_train_input1Y_train_input2

    如果您的目标不是合并两个模型,那么您应该将它们分开。当您合并/求和输出时,您最终只有一个输出。

    您是否真的打算拥有两个不同的独立模型,而它们之间没有任何交互?

    • 要么你有一个共同的输出和一个共同的Y_train,要么
    • 您有两个单独的输出和两个不同的目标。

    【讨论】:

    • 哦,我想我明白你的意思了!我想要的是合并图层以获得一个输出,但我目前的问题是两个输入数据的标签不同。所以,如果我只想要一个输出,我想我必须修改我的标签才能使 Y_train_input1 和 Y_train_input2 相同,对吗?
    • 我刚刚遇到另一个问题,我在问题中对其进行了编辑。你知道我该如何解决吗?
    • 如果我们有一个共同的输出和一个共同的 Y_train 那么我们将面临另一个问题,即训练数据的不同样本,这意味着两个数据集的长度不同,即使它们具有相似的类但仍然现在类的长度也不同这是我的问题:所有输入数组(x)应该具有相同数量的样本。得到数组形状:[(24424, 15, 12), (16325, 15, 12)]
    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 2020-09-18
    • 2020-09-19
    • 2018-03-17
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多