是否可以在每个任务的数据样本数量不同时,构建多输入多输出的深度神经网络模型

我想实现一个多任务深度神经网络(DNN),同时解决两个分类任务(任务1和任务2)。问题是我每个任务的数据量不同,我不确定在数据量不同的情况下是否可以进行多任务学习。

我编写了以下代码来实现多输入和多输出DNN。 x_train_T1, x_train_T2 分别是任务1和任务2的训练数据(X)。 y_train_T1y_train_T2 是任务1和任务2的标签数据(y)。 x_train_T1x_train_T2 是相同维度的特征向量(两者都是1443维)。但是这些数据的数量不同。对于任务1,我有1213个数据样本,而对于任务2,我有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)]

如果每个任务的数据样本数量相同,这段代码可以正常工作。

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


回答:

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

即使在进行梯度下降时,这也没有意义,因为你必须同时为每个任务/输入输入一个样本,所以如果每个任务的样本数量不匹配,那么对于某些样本,你就无法做到这一点。

没有办法解决这个问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注