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

标签 python tensorflow machine-learning keras

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

我编写了以下代码来实现多输入和多输出 DNN。 x_train_T1x_train_T2 分别是任务 1 和任务 2 的训练数据 (X)。 y_train_T1y_train_T2是Task1和Task 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 的限制,而是多任务学习框架的理论问题,因为它假设每个任务的样本之间存在 1:1 的关系。这意味着每个任务都有相同数量的样本。

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

没有办法解决这个问题。

关于python - 当每个任务有不同数量的数据样本时,是否可以制作多输入和多输出 DNN 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56021627/

相关文章:

python - 音频信号在字级边界处分离

Python BeautifulSoup 和请求网络抓取

python - 类返回 <bound method ...> 而不是我返回的值(python)

python - 如何将大数据集从 CSV 加载到 keras

python - 加载保存的模型后得到错误的预测

python - 使用和不使用基于目标的编码的流水线

python - 用 mode() 填充 NAN 数据不起作用-Pandas

Python wget模块不显示进度条

tensorflow - 如何使用自定义优化器加载 keras 保存的模型

python - Karpathy 的代码训练神经网络使用策略梯度打乒乓球