Domain Adaptation(李宏毅)机器学习 2023 Spring HW11 (Boss Baseline)
1. 领域适配简介
领域适配是一种迁移学习方法,适用于源领域和目标领域数据分布不同但学习任务相同的情况。具体而言,我们在源领域(通常有大量标注数据)训练一个模型,并希望将其应用于目标领域(通常只有少量或没有标注数据)。然而,由于这两个领域的数据分布不同,模型在目标领域上的性能可能会显著下降。领域适配技术的目标是通过对模型进行适配,缩小源领域与目标领域之间的差距,从而提升模型在目标领域的表现。
![](https://i-blog.csdnimg.cn/img_convert/b812bd76263163f908e990e5d49f3a02.png)
以数字识别为例,如果我们的源数据是灰度图像,并且在这些数据上训练模型,我们可以预期模型会取得相当不错的效果。然而,如果我们将这个在灰度图像上训练的模型用于分类彩色图像,模型的表现可能会较差。这是因为这两个数据集之间存在领域转移。
领域适配方法可以根据目标领域中标签的可用性进行分类:
-
有监督领域适配:源领域和目标领域都有标注数据。这种情况较为少见,因为领域适配的主要动机是目标领域标签的稀缺性。
-
无监督领域适配:源领域有标注数据,而目标领域没有标注数据。这是最常见且最具挑战性的情况。
-
半监督领域适配:源领域有标注数据,目标领域则只有少量标注数据。
![](https://i-blog.csdnimg.cn/img_convert/6d6c4c4390d981e32126746b13452209.png)
我们的博客和作业主要关注目标领域缺乏标注数据的场景。
解决这个问题的基本概念如下:我们旨在找到一个特征提取器,它能够接收输入数据并输出特征空间。这个特征提取器应该能够滤除领域特定的变化,同时保留不同领域之间共享的特征。例如,在以下的示例中,特征提取器应该能够忽略图像的颜色,对于相同的数字,不论其颜色如何,都能生成具有相同分布的特征。
![](https://i-blog.csdnimg.cn/img_convert/21b7df47ea325f5dac660b4dc5c28af6.png)
研究人员提出了许多方法,其中对抗学习方法是最常见且最有效的技术之一。
![](https://i-blog.csdnimg.cn/img_convert/f61c5cca7b6690153fa3bacac77504f4.png)
我们将一个标准网络分为两部分:特征提取器和标签预测器。在训练过程中,我们以标准的有监督方式在源领域数据上训练整个网络。对于目标领域数据,我们只使用特征提取器提取特征,并采用技术手段将目标领域的特征与源领域的特征对齐。
![](https://i-blog.csdnimg.cn/img_convert/c8bccdbd13396485dec8a458b7b7a23a.png)
具体来说,我们设计了一个新的领域分类器,它是一个二分类器,输入特征向量并判断输入数据是来自源领域还是目标领域。另一方面,特征生成器的设计目的是“欺骗”领域分类器,使其无法正确区分来源领域。
![](https://i-blog.csdnimg.cn/img_convert/beff53b917857b1779c6d7164cea5304.png)
如果我们仔细思考上述方法,我们可以直观地理解,尽管对抗训练可以使源领域和目标领域的整体分布更加相似,如下图左侧所示,但这种分布可能并不适合或不适用于机器学习任务。理想情况下,我们期望获得右侧图像所示的分布。
![](https://i-blog.csdnimg.cn/img_convert/66740b0100b935efc8ce4aea3a9d357a.png)
当然,已有大量论文提出了针对这一问题的解决方法。为了在这次作业中通过strong 和 boss baseline,我们需要深入相关文献,并采用合适的方法。在作业中,我将介绍更多相关的论文和技术。
2. Homework Results and Analysis
作业 11 聚焦于领域适配。给定真实图像(带标签)和涂鸦(无标签),任务是利用领域适配技术训练一个网络,能够准确预测绘制图像的标签。
![](https://i-blog.csdnimg.cn/img_convert/67438fd300de89305fadc30992839f09.png)
数据集设置:
-
标签:10个类别(编号从0到9),如以下图片所示。
-
训练集:5000张 (32, 32) RGB 真实图像(带标签)。
-
测试集:100000张 (28, 28) 灰度绘制图像。
![](https://i-blog.csdnimg.cn/img_convert/3956d39c5d61e1b7db2535d1a08ef5ef.png)
baseline 的门槛 在 Kaggle 上的数值为:
Baseline | Public | Private |
---|---|---|
Simple | Score >= 0.44280 | Score >= 0.44012 |
Medium | Score >= 0.65994 | Score >= 0.65928 |
Strong | Score >= 0.75342 | Score >= 0.75518 |
Boss | Score >= 0.81072 | Score >= 0.80794 |
像往常一样,助教会提供关于如何超越各种基准模型的指导。
![](https://i-blog.csdnimg.cn/img_convert/c7ed2eba3ed6d02841779ed32d87a40b.png)
![](https://i-blog.csdnimg.cn/img_convert/42e0ff0902b5d5eb420c7000f9ee52c4.png)
2.1 Simple Baseline
使用助教提供的默认代码足以通过 simple baseline。
2.2 Medium Baseline
通过增加训练轮数并调整超参数 lambda,可以通过 medium baseline。
num_epochs = 800
# train 800 epochswith Progress(TextColumn("[progress.description]{task.description}"),BarColumn(),TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),TimeRemainingColumn(),TimeElapsedColumn()) as progress:epoch_tqdm = progress.add_task(description="epoch progress", total=num_epochs)for epoch in range(num_epochs):train_D_loss, train_F_loss, train_acc = train_epoch(source_dataloader, target_dataloader, progress, lamb=0.6)progress.advance(epoch_tqdm, advance=1)if epoch == 10:torch.save(feature_extractor.state_dict(), f'extractor_model_early.bin')torch.save(label_predictor.state_dict(), f'predictor_model_early.bin')elif epoch == 100:torch.save(feature_extractor.state_dict(), f'extractor_model_mid.bin')torch.save(label_predictor.state_dict(), f'predictor_model_mid.bin')torch.save(feature_extractor.state_dict(), f'extractor_model.bin')torch.save(label_predictor.state_dict(), f'predictor_model.bin')print('epoch {:>3d}: train D loss: {:6.4f}, train F loss: {:6.4f}, acc {:6.4f}'.format(epoch, train_D_loss, train_F_loss, train_acc))
2.3 Strong Baseline
助教建议了几篇论文来提升性能并通过strong baseline。其中,我发现以下这篇论文特别有趣:《Minimum Class Confusion for Versatile Domain Adaptation》(Jin, Ying, et al.)(链接)。
他们“提出了一种新颖的损失函数:Minimum Class Confusion(MCC)。它可以被描述为一种新颖且多功能的领域适配方法,无需显式进行领域对齐,且具有较快的收敛速度。此外,它还可以作为一种通用正则化器,与现有的领域适配方法正交且互补,从而进一步加速和改善这些已有的竞争性方法。”(Jin, Ying, et al.,p. 3)
![](https://i-blog.csdnimg.cn/img_convert/e8c9ef3ff6030bd1bf6669d64530f76c.png)
MCC 的计算过程如下:
给定以下变量:
-
:网络输出的目标领域数据的logits(即网络分类器的输出)。
-
:一个温度参数,用于缩放logits,使其更加平滑并增大类别分布之间的差异。
-
:目标领域经温度平滑后的预测结果,表示通过softmax得到的概率分布。
-
:熵函数,用于衡量每个样本的预测不确定性。
MCC步骤1:目标领域logits的温度缩放:
目标领域的logits 通过温度进行缩放,以平滑分类概率:
其中, 用于拉伸预测的概率分布,防止模型过于自信。
MCC步骤2:计算Softmax输出:
将经过温度缩放的logits通过softmax函数得到目标领域预测的概率分布 :
此处, 是一个
的矩阵,其中
是目标领域样本的数量,
是分类的类别数。
MCC步骤3:计算样本熵权重:
每个样本的熵 使用以下公式计算:
相关文章:
Domain Adaptation(李宏毅)机器学习 2023 Spring HW11 (Boss Baseline)
1. 领域适配简介 领域适配是一种迁移学习方法,适用于源领域和目标领域数据分布不同但学习任务相同的情况。具体而言,我们在源领域(通常有大量标注数据)训练一个模型,并希望将其应用于目标领域(通常只有少量或没有标注数据)。然而,由于这两个领域的数据分布不同,模型在…...
![](https://www.ngui.cc/images/no-images.jpg)
在php中,Fiber、Swoole、Swow这3个协程都是如何并行运行的?
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
![](https://www.ngui.cc/images/no-images.jpg)
SQLite PRAGMA
SQLite的PRAGMA命令是一种特殊的命令,用于在SQLite环境中控制各种环境变量和状态标志。PRAGMA值可以被读取,也可以根据需求进行设置【0†source】。 PRAGMA命令的语法格式如下: 要查询当前的PRAGMA值,只需提供该PRAGMA的名字&am…...
![](https://www.ngui.cc/images/no-images.jpg)
使用python调用JIRA6 REST API及遇到的问题
JIRA认证方式简述 JIRA接口调用有两种认证方式访问Jira Rest API,基本认证⽅式(⽤户名和密码)和OAuth1认证方式。 基本认证⽅式:因为⽤户名和密码会被浏览器重复地请求和发送,即使采⽤ SSL/TLS 发送,也会有安全隐患,…...
![](https://i-blog.csdnimg.cn/direct/e5a0b41de8c040fc8b37bf9441d31917.png#pic_center)
基于STM32的智能电表可视化设计:ESP8266、AT指令集、python后端Flask(代码示例)
一、项目概述 随着智能家居的普及,智能电表作为家庭用电管理的重要工具,能够实时监测电流、电压及功率,并将数据传输至后台进行分析和可视化。本项目以STM32C8T6为核心,结合交流电压电流监测模块、ESP8266 Wi-Fi模块、OLED显示屏…...
![](https://i-blog.csdnimg.cn/direct/ecaebe577c4147bea153fd28c860a3ea.png)
图片和短信验证码(头条项目-06)
1 图形验证码接口设计 将后端⽣成的图⽚验证码存储在redis数据库2号库。 结构: {img_uuid:0594} 1.1 创建验证码⼦应⽤ $ cd apps $ python ../../manage.py startapp verifications # 注册新应⽤ INSTALLED_APPS [django.contrib.admin,django.contrib.auth,…...
![](https://www.ngui.cc/images/no-images.jpg)
2501,wtl显示html
原文 在MFC程序中有专门封装的CHTMLView来显示超文本文件,如果在对话框中显示网页可用CDHTMLDialog,甚至可实现多页超文本向导风格的对话框,但是在WTL中却没有单独封装超文本的对应控件,这是因为COM组件的使用和编写本来就是ATL的强项,WTL扩展的是ATL欠缺的桌面应用的功能部分…...
![](https://i-blog.csdnimg.cn/direct/31c42ea5ae194e459c4bce508a48d17c.png)
嵌入式C语言:什么是指针?
目录 一、指针的基本概念 1.1. 定义指针 1.2. 赋值给指针 1.3. 解引用指针 1.4. 指针运算 1.5. 空指针 1.6. 函数参数 1.7. 数组和指针 1.8. 示例代码 二、指针在内存中的表示 2.1. 内存地址存储 2.2. 内存模型 2.3. 指针与硬件交互 2.4. 示例代码 三 、指针的重…...
![](https://www.ngui.cc/images/no-images.jpg)
解锁 KaiwuDB 数据库工程师,开启进阶之路
解锁 KaiwuDB 数据库工程师试题,开启进阶之路 一、KaiwuDB 数据库全方位洞察 (一)核心特性深度解析 原生分布式架构:摒弃传统集中式存储的局限,KaiwuDB 采用原生分布式架构,将数据分散存于多个节点。这不仅能有效避免单点故障风险,保障数据的高可用性,还能凭借并行处…...
![](https://i-blog.csdnimg.cn/direct/21d1bf5b2c6444b3b33ad9c5168a5125.png)
ffmpeg7.0 aac转pcm
#pragma once #define __STDC_CONSTANT_MACROS #define _CRT_SECURE_NO_WARNINGSextern "C" { #include "libavcodec/avcodec.h" }//缓冲区大小(缓存5帧数据) #define AUDIO_INBUF_SIZE 40960 /*name depthu8 8s16 …...
![](https://www.ngui.cc/images/no-images.jpg)
【Pandas】pandas Series rdiv
Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...
![](https://www.ngui.cc/images/no-images.jpg)
线程安全问题介绍
文章目录 **什么是线程安全?****为什么会出现线程安全问题?****线程安全问题的常见场景****如何解决线程安全问题?**1. **使用锁**2. **使用线程安全的数据结构**3. **原子操作**4. **使用volatile关键字**5. **线程本地存储**6. **避免死锁*…...
![](https://www.ngui.cc/images/no-images.jpg)
为AI聊天工具添加一个知识系统 之27 支持边缘计算设备的资源存储库及管理器
本文问题 现在我们回到 ONE/TWO/TREE 的资源存储库 的设计--用来指导 足以 支持 本项目(为AI聊天工具增加一套知识系统)的 核心能力 “语言处理” 中 最高难度系数的“自然语言处理” 中最具挑战性的“含糊性” 问题的解决。--因为足以解决 自然语言中最…...
![](https://www.ngui.cc/images/no-images.jpg)
初识verilog HDL
为什么选择用Verilog HDL开发FPGA??? 硬件描述语言(Hardware Descriptipon Lagnuage,HDL)通过硬件的方式来产生与之对应的真实的硬件电路,最终实现所设计的预期功能,其设计方法与软件…...
![](https://i-blog.csdnimg.cn/direct/45b63a4ecbf04128aa075ff89e4a132d.png)
VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署
近期有个工作需求是进行 YOLOv8 模型的 C 部署,部署环境如下 系统:WindowsIDE:VS2015语言:COpenCV 4.5.0OnnxRuntime 1.15.1 0. 预训练模型保存为 .onnx 格式 假设已经有使用 ultralytics 库训练并保存为 .pt 格式的 YOLOv8 模型…...
![](https://i-blog.csdnimg.cn/direct/98a0fb9b16204fab8ea6e0d18c0c4b44.png)
Notepad++上NppFTP插件的安装和使用教程
一、NppFTP插件下载 图示是已经安装好了插件。 在搜索框里面搜NppFTP,一般情况下,自带的下载地址容易下载失败。这里准备了一个下载连接:Release v0.29.10 ashkulz/NppFTP GitHub 这里我下载的是x86版本 下载好后在nodepad的插件里面选择打…...
![](https://www.ngui.cc/images/no-images.jpg)
Kotlin | Android Provider 的实现案例
目标 使用 Android Room 实现持久化库。 代码 Kotlin 代码编写 DemoDatabase,在build生成 DemoDatabase_Impl 疑问 Provider的数据会存在设备吗? 内部存储: 当使用 Room 创建数据库(如 DemoDatabase),数据库文件通常…...
![](https://www.ngui.cc/images/no-images.jpg)
频域自适应空洞卷积FADC详解
定义与原理 在探讨FADC的核心策略之前,我们需要深入了解其定义和工作原理。FADC是一种创新性的卷积技术,旨在克服传统空洞卷积的局限性。其核心思想是从 频谱分析的角度 改进空洞卷积,通过 动态调整膨胀率 来平衡有效带宽和感受野大小。 FADC的工作原理可以从以下几个方面…...
![](https://i-blog.csdnimg.cn/direct/131fa5b19da74d17a7cf5a7274678e31.png)
Edge浏览器内置的截长图功能
Edge浏览器内置截图功能 近年来,Edge浏览器不断更新和完善,也提供了长截图功能。在Edge中,只需点击右上角的“...”,然后选择“网页捕获”->“捕获整页”,即可实现长截图。这一功能的简单易用,使其成为…...
![](https://i-blog.csdnimg.cn/direct/bb0bc8e09b424b99ac0674744774001e.png)
GAN的应用
5、GAN的应用 GANs是一个强大的生成模型,它可以使用随机向量生成逼真的样本。我们既不需要知道明确的真实数据分布,也不需要任何数学假设。这些优点使得GANs被广泛应用于图像处理、计算机视觉、序列数据等领域。上图是基于GANs的实际应用场景对不同G…...
![](https://www.ngui.cc/images/no-images.jpg)
Math Reference Notes: 希腊字母表
希腊字母(Greek alphabet)是古希腊语使用的字母系统,也是西方字母系统的先驱之一,广泛应用于现代数学、物理学、工程学以及各种科学领域。希腊字母有24个字母,它们分为大写和小写两种形式。 1. Alpha (Α, α) 发音&a…...
![](https://i-blog.csdnimg.cn/direct/6e7bab5b3df2402b81a30ec4c0489953.png)
高通,联发科(MTK)等手机平台调优汇总
一、常见手机型号介绍: ISP除了用在安防行业,还有手机市场,以及目前新型的A/VR眼睛,机器3D视觉机器人,医疗内窥镜这些行业。 下面是一些最近几年发布的,,,旗舰SOC型号: 1.联发科:天玑92…...
![](https://i-blog.csdnimg.cn/direct/dc227f9533b5490eaa3bb70f360df93b.png)
Rust语言使用iced实现简单GUI页面
使用cargo新建一个rust项目 cargo new gui_demo cd gui_demo 编辑Cargo.toml文件 ,添加iced依赖 [package] name "gui_demo" version "0.1.0" edition "2021"[dependencies] iced "0.4.2" 编辑src/main.rs文件: u…...
![](https://i-blog.csdnimg.cn/direct/af9f1aded5c1456886fb9cec70bbd1e7.png)
使用wav2vec 2.0进行音位分类任务的研究总结
使用wav2vec 2.0进行音位分类任务的研究总结 原文名称: Using wav2vec 2.0 for phonetic classification tasks: methodological aspects 研究背景 自监督学习在语音中的应用 自监督学习在自动语音识别任务中表现出色,例如说话人识别和验证。变换器模型…...
![](https://www.ngui.cc/images/no-images.jpg)
25/1/11 嵌入式笔记<esp32> 初入esp32
用Arduino平台,学习了点亮led灯。 //定义LED引脚 int led_pin 12;void setup() {//设定引脚为输出模式pinMode(led_pin,OUTPUT):}void loop() {// 点亮LED:digitalWrite(led_pin,HIGH);//延时1sdelay(1000);//熄灭LEDdigitalWrite(led_pin,LOW)://延时…...
![](https://i-blog.csdnimg.cn/direct/708f88616c074c14aa0eb8352f3ee12d.png)
基于SMT32U575RIT单片机-中断练习
任务 查看手册对所有的拓展板上和相对应的底板的引脚对应的端口找到以下结论 通过STM32MX软件对各个引脚进行相应的配置 1.第一种切换模式电脑发送 #include "main.h" #include "icache.h" #include "usart.h" #include "gpio.h"/*…...
![](https://www.ngui.cc/images/no-images.jpg)
在Django的Serializer的列表数据中剔除指定元素
【Python工作随笔】 提问 如何在List序列化方法中剔除不要的元素,例如在成绩中剔除0 class BasicDescriptionSubjectBoxPlotSerializer(serializers.Serializer):语文 serializers.ListField(sourcescore_chinese)数学 serializers.ListField(sourcescore_math…...
![](https://i-blog.csdnimg.cn/direct/4909967af21149b69b50b0997853d414.png)
我喜欢的数学题
偏向抖机灵性质的,考察理解的,而不是比拼计算量的,可能跟现在岁数大了算不明白了多少有点关系吧。 高高手,别太重计算,给普通孩子留条路。就算将来真的理工治国,也没必要都往人形计算机方面引导。毕竟你未来…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis解决热key问题
当Redis遇到热key问题时,即某个或某些key被频繁访问,可能导致单个Redis节点负载过高,影响整个系统性能。以下是一些常见的解决方案: 1. 缓存预热与复制 缓存预热:在系统启动阶段,将热key对应的value预先加…...
![](https://i-blog.csdnimg.cn/direct/d9124f3bcb7f4db5810d5b07c553b225.png)
【git】-2 分支管理
目录 一、分支的概念 二、查看、创建、切换分支 1、查看分支-git branch 2、创建分支- git branch 分支名 3、切换分支- git checkout 分支名 三、git指针 -实现分支和版本间的切换 四、普通合并分支 git merge 文件名 五、冲突分支合并 【git】-初始gi…...
![](/images/no-images.jpg)
邢台555信息港/seo求职
起点有起点之美,终点有终点的荣誉,从起点到终点的距离,不是很远.记得读初中的时候,有一次半期测试,我们考外语时,我的外语很差,我就交了卷,写了姓名,后来,我告诉了婆婆,婆婆说我这一辈子像这样的考试我只有这一次,但是我逃避了,我这一生就没有机会去享受了,去享受她中间的喜与悲…...
![](https://img-blog.csdnimg.cn/fdc27a3e6a7e47ae97a7c17b9cd99eab.png)
网站导航上的图片做多大尺寸/seo和竞价排名的区别
一个完整的信号一定是以0开始然后以0结尾的,输入一串方波信号是由一个或者多个完整信号组成的,两个相邻的信号之间可能有-个或者多个低位, 同一个信号中间可以有连续的高位,完全连续交替方波是指0交替, while 1:try:nums = input()# 提取信号段,由0分隔的信号段dp = []…...
![](/images/no-images.jpg)
网站建设的过程包括几个阶段/营销策划与运营公司
一、mysql数据库日常操作。 1.启动mysql:/etc/init.d/mysql start (前面为mysql的安装路径) 2.重启mysql: /etc/init.d/mysql restart (前面为mysql的安装路径) 3.关闭mysql: /etc/init.d/mysql stop(前面为mysql的安装路径) …...
![](https://img-blog.csdnimg.cn/img_convert/7422b8132539e56abba806ae4e5f23c2.png)
《网页设计与制作》实验报告/seo主要做什么
单条件查询:1.先要有一张表,显示出表中的数据:无标题文档编号姓名电话分组$db new mysqli("localhost","root","12345678","heiheihei");$sql "select * from contacts";$r $db->qu…...
![](http://f.hiphotos.baidu.com/exp/w=500/sign=fa57447d0a46f21fc9345e53c6256b31/0dd7912397dda14480a96634b2b7d0a20df48697.jpg)
江苏连云港做网站/在线代理浏览网址
系统盘里带着那个啊具体步骤。。1运行GHOST,进入GHOST主页面 2在主页面单击OK按钮后依次执行Local\Partition\To lmage,命令 3接下来选择硬盘.用户装了几个硬盘,则此处就会出现几个选项. 4接下来,选择硬盘中的分区.选择需要的分区后,单击OK进入下一个步骤 5选择存放的地址和文件…...
![](/images/no-images.jpg)
如何做好公司网站/重庆seo网站推广费用
假设,我们现在需要对我们的 http://wiki.ossez.com 网站上的首页进行载入测试。我们想模拟多个用户对网站进行同时进行访问时候服务器的性能。JMeter 如何记录网页上的元素图文教程 [url]http://www.ossez.com/forum.php?modviewthread&tid12999&fromuid42…...