AAAI2020多视图学习模型MvNNcor对多标签任务迁移

MvNNcor对多标签任务迁移

  • 目的
  • 基础
  • 进阶
  • 下一步

目的

之前阅读了AAAI2020 Deep Embedded Complementary and Interactive Information for Multi-view Classification这篇文章并做了阅读笔记,但是这是一个用于单标签任务的模型,出于用来做对比实验的目的欲把它改成了多标签模型,下面开始。

基础

先观察模型结构如下图
AAAI2020多视图学习模型MvNNcor对多标签任务迁移_第1张图片
聚焦到模型最后的预测结果并融合的部分,观察源码发现最后的分类部分就是简单的全连接层,而且因为是多分类问题所以随后输出层有num_classes个节点。

        self.classifier_out = nn.Sequential(
            nn.Linear(num_view * fea_out, fea_com),
            nn.BatchNorm1d(fea_com),     
            nn.ReLU(inplace=True), 
            nn.Dropout(),
            nn.Linear(fea_com, num_classes),                   
            nn.BatchNorm1d(num_classes)                  
        )

那么最简单的更改方法来啦,模型不用动,把loss从nn.CrossEntropyLoss()这个多分类损失换成BCEWithLogitsLoss(),然后把模型最后输出直接计算损失然后反向传播即可。

进阶

上面的方法简单易行但是太过于粗暴了,模型本来最后用的就同一个网络完 φ \varphi φ成最后分类操作就够鲁棒了,我们改用多标签任务的话就相当于原来文章中 α \alpha α(视图信息融合权重)也是公用于所有便签中。所以我们用BR思想,把多标签看成多个二分类任务,对于每一个标签设置一套 α \alpha α把原来的数组(num_views)变成二维数组(num_classes,num_views)。

#初始alpha
weight_var = torch.ones(opt.num_classes ,opt.num_view) * (1/opt.num_view)   

然后模拟原来计算 α \alpha α的操作计算每组标签的 α \alpha α

for i in range(opt.num_classes):
        #每个标签
            weight_up_list = []
            #每个视图
            for v in range(opt.num_view):
                #某个标签某个视图的loss
                loss += (weight_var[i][v] ** gamma) * loss_temp[v,:,i].sum()
        
                weight_up_temp = loss_temp[v,:,i].sum() ** (1/(1-gamma))
                weight_up_list.append(weight_up_temp)

            temp_weight = weight_var[i].unsqueeze(1)
            temp_weight = temp_weight.expand(temp_weight.size(0), opt.batchSize)
 

            output_var = torch.stack(Output_list)
            temp_out = temp_weight * output_var[:,:,i]
            output_weighted[:,i] = torch.sum(temp_out, 0)

            weight_up_var = torch.FloatTensor(weight_up_list).to("cuda")
            weight_down_var = torch.sum(weight_up_var)
            #更新标签i
            weight_var[i] = torch.div(weight_up_var, weight_down_var)

下一步

模型的另外一个特点就是上面提到过的公用分类网络 φ \varphi φ,这也是这篇的特点,信息融合的关键点;但是这也可能是一个瓶颈所在,多个分类任务共有的可能没有每个标签私有的好,所以进一步的改进就是把 φ \varphi φ变成一个moudle_list针对每个标签单独训练,不过这样计算代价很大并且丧失了文章创新点。

你可能感兴趣的:(DL,人工智能,神经网络,机器学习,深度学习)