【问题标题】:mutli-task learning keras ( integrate two task in one mutli-ask one)多任务学习 keras(将两个任务合二为一)
【发布时间】:2020-05-02 22:39:48
【问题描述】:

我在 keras 上工作,我有两个问题要解决(一个分类和其他回归),输入相同但输出不同 对于分类,所有数据都将被使用,也将用于回归,差异仅在输出层 我为每个模型创建一个模型,作为以下分类示例

model = Sequential()
model.add(Dense(300, activation='relu', input_dim=377))
model.add(Dense(256, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(56, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(1))# 

而且效果很好,在最后一个模型中发生变化的相同模型适用于回归问题 我的问题是如何在多任务学习神经网络中整合这两个任务,它接受一个输入并输出这两个任务 我搜索了很多,但我没有找到我想要的解决方案 注意:我使用 CSV 文件格式的数据

任何帮助将不胜感激

【问题讨论】:

标签: python keras


【解决方案1】:

这是一个使用 keras 功能 api 的示例

inp = Input((377,))
x = Dense(300, activation='relu')(inp)
x = Dense(256, activation='relu')(x)
x = Dense(128, activation='relu')(x)
x = Dropout(0.1)(x)
x = Dense(56, activation='relu')(x)
x = Dense(16, activation='relu')(x)
x = Dropout(0.1)(x)

out_reg = Dense(1, name='reg')(x)
out_class = Dense(1, activation='sigmoid', name='class')(x) # I suppose bivariate classification problem

model = Model(inp, [out_reg, out_class])

model.compile('adam', loss={'reg':'mse', 'class':'binary_crossentropy'}, 
              loss_weights={'reg':0.5, 'class':0.5})

我使用您报告的结构进行分类和回归,唯一的区别在于输出:2 个密集层,一个回归和另一个分类(我想是二元分类器)

我还为回归和分类应用了不同的损失。你也可以用不同的方式来平衡它们

【讨论】:

  • 请问如何评估和返回 rmse 和 binary_crossentropy .. 我的问题是如何通过 x、y1、y2 进行评估
  • 它给出了以下错误“ValueError: Output tensors to a Model must be the output of a Keras Layer (因此保存了过去的层元数据)”
猜你喜欢
  • 2019-04-20
  • 2012-01-31
  • 2018-04-03
  • 2020-09-19
  • 2014-08-05
  • 1970-01-01
  • 2020-09-18
  • 2013-10-23
  • 2019-12-04
相关资源
最近更新 更多