Keras上的域适应

时间:2018-01-23 08:55:47

标签: neural-network deep-learning keras conv-neural-network

我正在Keras上使用CNN开发图像分类器。由于图像来自多个域,我想尝试域适应。

为了同时训练图像分类器以及制作域不变的特征,我在Keras中为域丢失提供了负损失权重。

model.compile(optimizer='adam', 
          loss={'main_output': 'categorical_crossentropy', 'domain_output': 'categorical_crossentropy'},
          loss_weights={'main_output': 1, 'domain_output': -0.1},
          metrics={'main_output': 'accuracy, 'domain_output': 'accuracy'})

此处,main output是图像分类的softmax输出,domain_output是域分类的softmax输出(目标:域标签)。

  • 这种实现对于域适应是否正确?

  • 这种方法在功能上与"梯度反转层相同" ({3}}

  • 中提出的(逆转域分类的梯度)

2 个答案:

答案 0 :(得分:2)

嗯 - 您的两个问题的回答都是肯定的(只要您有域和类预测的单独模型分支和输出)。

  1. 这种实现是正确的 - 因为域适应需要反转梯度(相当于负重的损失),
  2. 如上所述 - 是的。

答案 1 :(得分:0)

我认为答案应该是: 1.是的,这是一种领域适应。 2.不,这不是该文件的实施。

这是因为对于“梯度反转层”,梯度反转发生在几个完全连接的层之前。这意味着要对这些层进行训练以区分域。如果您直接像代码中那样逆转损失,那么也会使最后一层有所分歧。基本上,您没有训练。

虽然我不确定最终结果,但我想它可能会比“梯度反转层”的原始实施情况差。