DANN GRL

devtools/2024/9/24 6:17:22/

域自适应是指在目标域与源域的数据分布不同但任务相同下的迁移学习,从而将模型在源域上的良好性能迁移到目标域上,极大地缓解目标域标签缺失严重导致模型性能受损的问题。

介绍一篇经典工作 DANN :

模型结构

model

在训练阶段需要预测如下两个任务:

  • 实现源域数据集准确分类,即图像分类误差的最小化,这与正常分类任务保持一致
  • 实现源域和目标域准确分类,即域分类器的误差最小化。而特征提取器的目标是最大化域分类误差,使得域分类器无法分辨数据是来自源域还是目标域,从而让特征提取器学习到域不变特征(domain-invariant)。也就是说特征提取器和域分类器的目标是相反的
    • 本质上就是让特征提取器不要过拟合源域,要学习出源域和目标域的泛化特征
    • 这两个网络对抗训练,DANN通过GRL层使特征提取器更新的梯度与域判别器的梯度相反,构造出了类似于GAN的对抗损失,又通过该层避免了GAN的两阶段训练过程,提升模型训练稳定性

GRL_18">GRL

GRL是作用在特征提取器上的,对其参数梯度取反。

具体实现如下:

class ReverseLayerF(Function):@staticmethoddef forward(ctx, x, alpha):ctx.alpha = alphareturn x.view_as(x)@staticmethoddef backward(ctx, grad_output):output = grad_output.neg() * ctx.alphareturn output, None

调用如下:

def forward(self, input_data, alpha):input_data = input_data.expand(input_data.data.shape[0], 3, 28, 28)feature = self.feature(input_data)feature = feature.view(-1, 50 * 4 * 4)reverse_feature = ReverseLayerF.apply(feature, alpha)class_output = self.class_classifier(feature)domain_output = self.domain_classifier(reverse_feature)return class_output, domain_output

参考

  • 【深度域自适应】一、DANN与梯度反转层(GRL)详解
  • zengjichuan/DANN

http://www.ppmy.cn/devtools/116367.html

相关文章

流行的微前端框架有哪些,适应场景是什么

以下是一些流行的微前端框架,各自的适用场景 1. Single-SPA 适用场景: 适用于需要将大型应用拆分为多个小型、独立应用的场景。支持多种框架的集成。 GitHub地址: Single-SPA Star数量: 约6.8k 2. qiankun 适用场景&#x…

统信服务器操作系统【qcow2 镜像空间扩容】方案

使用 qcow2 镜像安装系统,当默认安装系统存储空间不够用时,进行自定义扩容 文章目录 准备环境扩容步骤一、检查环境信息1.查看镜像信息2.查看镜像分区信息3.确认需要扩容的分区名二、扩容1.备份镜像2.创建新的镜像文件,并指定空间3.将系统扩容到新的镜像三、扩容 lvm 分区四…

着色器ShaderMask

说明 实现一个渐变进度条,要求: 颜色渐变的过程是循序渐进的,而不是看起来像是将渐变条逐渐拉长了。 效果 源码 // 渐变进度条Stack(children: [// 背景色板Container(width: 300,height: 8,decoration: BoxDecoration(borderRadius: Bord…

Unity-物理系统-刚体加力

一 刚体自带添加力的方法 给刚体加力的目标就是 让其有一个速度 朝向某一个方向移动 1.首先应该获取刚体组件 rigidBody this.GetComponent<Rigidbody>(); 2.添加力 //相对世界坐标 //世界坐标系 Z轴正方向加了一个里 //加力过后 对象是否停止…

基于QT的C++中小项目软件开发架构源码

描述 基于QT信号槽机制实现类之间的交互调用通信&#xff0c;适用于使用不同枚举作为消息交互的类型场景&#xff0c;支持附带任意参数&#xff0c;代码使用方式参考前一篇文章 特性 仅需包含一个头文件Communicator.h&#xff0c;需要通信的业务类继承Communicator&#xf…

【数据结构】什么是二叉搜索(排序)树?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;二叉搜索(排序)树的概念 &#x1f4cc;二叉搜索(排序)树的操作 &#x1f38f;二叉搜索树的查找 &#x1f38f;二叉搜索树的插入 &#x1f38f;二叉搜索树的…

C++存储数据单位转换输出字符串

C封装存储数据单位转换, 方便将输入数据以指定方式输出 main.cpp #include <wtypesbase.h> #include <string> #include <vector> #include <tchar.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 数…

vue3知识汇总

vue3.x 0. changelog https://juejin.cn/post/7030992475271495711#heading-0 1. vite//要构建一个 Vite Vue 项目&#xff0c;运行&#xff0c;使用 NPM:npm init vitejs/app 项目名//使用 Yarn:yarn create vitejs/app 项目名//你会觉得非常快速的创建了项目&#xff0c;然…