1

例子:

  1. inceptionv3_model1有 10 类(香蕉、橙子、葡萄......)
  2. inceptionv3_model2有 3 个类(过期,笔记过期,正常)

我需要合并这两个模型以获得多个输出结果。例如过期香蕉或普通香蕉...

4

1 回答 1

0

您应该重新训练模型。听起来每个样本都有 2 个标签,类别 [香蕉、橙子、葡萄等] 和状态 [过期、未过期、正常](尽管我看不出正常和未过期之间的区别)。

处理这个问题最直接的方法是使用多任务学习。在此处详细阅读:

http://ruder.io/multi-task/

您的输入应该是data, label_type, label_state, 到 inceptionv3 模型(与您使用的相同)。

现在采用您为每个当前模型使用的成本函数。像这样的东西:

cost_type = tf.nn.softmax_cross_entropy_with_logits_v2(labels=label_type, logits=logits_type)
cost_state = tf.nn.softmax_cross_entropy_with_logits_v2(labels=label_state, logits=logits_state)

或者使用您当前使用的任何损失函数。现在定义一个累积损失函数为:

cost = cost_type + cost_state

由于这些都是交叉熵(分类)损失,因此无需担心任何规模问题。最小化cost,你应该得到一个训练有素的网络来产生两个输出。这个网络经常会在各自的任务上胜过单个网络。

您需要为上面的每个成本函数创建两个输出层。这些层中的每一层都可以连接到同一层。如果不清楚,请告诉我,我会详细说明。

于 2018-04-10T18:36:57.413 回答