当我对每个任务有不同数量的数据样本时,是否可以制作多个输入和多个输出DNN模型

时间:2019-05-07 11:31:29

标签: python tensorflow machine-learning keras

我想实现一个多任务深度神经网络(DNN),该网络可以同时解决两个分类任务(Task1,Task2)。问题是我为每个任务拥有不同数量的数据,并且不确定在拥有不同数量数据时是否可以进行多任务学习。

我编写了以下代码来实现多个输入和多个输出DNN。 x_train_T1x_train_T 2分别是任务1和任务2的训练数据(X)。 y_train_T1y_train_T2是任务1和任务2的标签数据(y)。x_train_T1x_train_T2是相同维的特征向量(均为1443维)。但是这些数据的数量不同。对于Task1,我有1213个数据样本,对于Task2,我有1271个数据样本。


input_T1_tensor=Input(shape=(x_train_T1.shape[1],),name='T1_input')
input_T2_tensor=Input(shape=(x_train_T2.shape[1],),name='T2_input')
concatenated=layers.concatenate([input_T1_tensor,input_T2_tensor],axis=-1)
x=Dropout(concatenated)
x=layers.Dense(x)
T1_layer=layers.Dense(10,activation='relu')(x)
T2_layer=layers.Dense(10,activation='relu')(x)
T1_out=layers.Dense(1,activation='sigmoid',name='T1_out')(T1_layer)
T2_out=layers.Dense(1,activation='sigmoid',name='T2_out')(T2_layer)
model=Model(inputs=[input_T1_tensor,input_T2_tensor],outputs=[T1_out,T2_out])
model.compile(loss={'T1_out':'binary_crossentropy','T2_out':'binary_crossentropy'},optimizer='adam',metrics=['accuracy'])
model.fit([x_train_T1,x_train_T2],[y_train_T1,y_train_T2],epochs=epoch,batch_size=batch,verbose=0,validation_split=0.1,callbacks=[early_stopping])

运行此代码时,出现以下错误消息。

All input arrays (x) should have the same number of samples. Got array shapes: [(1213, 1443), (1271, 1443)]

如果每个任务的样本数均相同,则此代码效果很好。

我想知道当我有不同数量的学生时是否可以进行多任务学习 每个任务的数据。

1 个答案:

答案 0 :(得分:1)

否,这是不可能的。这不是Keras的局限性,而是多任务学习框架的理论问题,因为它假设每个任务的样本之间存在1:1的关系。这意味着每个任务有相同数量的样本。

即使进行梯度下降也没有意义,因为您必须同时为每个任务/输入输入一个样本,因此,如果每个任务的样本不匹配,那么您将无法对某些样本执行此操作。

没有办法解决这个问题。