TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化...

全文链接:https://tecdat.cn/?p=39656

本文围绕基于TensorFlow实现的神经网络对抗训练域适应方法展开研究。详细介绍了梯度反转层的原理与实现,通过MNIST和Blobs等数据集进行实验,对比了不同训练方式(仅源域训练、域对抗训练等)下的分类性能。结果表明,域对抗训练能够有效提升模型在目标域上的适应能力,为解决无监督域适应问题提供了一种有效的途径点击文末“阅读原文”获取完整代码、数据、远程指导)。

在机器学习和深度学习领域,域适应是一个重要的研究方向。不同数据源(即不同域)之间往往存在分布差异,这使得在一个域上训练的模型在另一个域上的性能显著下降。“Unsupervised Domain Adaptation by Backpropagation” 论文提出了一种简单有效的方法,通过随机梯度下降(SGD)和梯度反转层来实现域适应。后续的 “Domain - Adversarial Training of Neural Networks” 对该工作进行了详细阐述和扩展。

梯度反转层

梯度反转层是实现域对抗训练的关键。

# 反转 x 关于 y 的梯度,并按 l 进行缩放(默认为 1.0)
y = flip_gradient(x, l)
MNIST
构建MNIST - M数据集
实验结果对比

以下是大致的结果:

Blobs - DANN
Blob数据集
# 绘制数据集
plt.scatter(Xs\[:, 0\], Xs\[:, 1\], c=ys, cmap='coolwarm', alpha=0.4)
plt.scatter(Xt\[:, 0\], Xt\[:, 1\], c=yt, cmap='cool', alpha=0.4)
plt.show()

Blob数据集可视化

构建模型

不同训练方式的实验
  • 域分类:设置 grad_scale=-1.0 可以有效关闭梯度反转。仅训练域分类器会创建使类别合并的表示。

train\_loss = sess.graph.get\_tensor\_by\_name(train\_loss\_name + ':0')train\_op = sess.graph.get\_operation\_by\_name(train\_op\_name)sess.run(tf.global\_variables\_initializer())for i in range(num_batches):if grad_scale is None:
不同训练方式的实验
  • 域分类

F = sess.graph.get\_tensor\_by\_name(feat\_tensor_name + ':0')emb\_s = sess.run(F, feed\_dict={'X:0': Xs})emb\_t = sess.run(F, feed\_dict={'X:0': Xt})emb\_all = np.vstack(\[emb\_s, emb_t\])pca = PCA(n_components=2)pca\_emb = pca.fit\_transform(emb_all)num = pca_emb.shape\[0\] // 2plt.scatter(pca\_emb\[:num, 0\], pca\_emb\[:num, 1\], c=ys, cmap='coolwarm', alpha=0.4)plt.scatter(pca\_emb\[num:, 0\], pca\_emb\[num:, 1\], c=yt, cmap='cool', alpha=0.4)plt.show()
train\_and\_evaluate(sess, 'domain\_train\_op', 'domain\_loss', grad\_scale=-1.0, verbose=False)
extract\_and\_plot\_pca\_feats(sess)

运行结果如下:

域分类PCA特征可视化
从结果可以看出,仅训练域分类器时,模型能够很好地区分源域和目标域,但对类别的区分能力较差,这表明这种训练方式创建的表示使类别合并了。

  • 标签分类

运行结果如下:

标签分类PCA特征可视化
在源域上进行标签预测训练时,模型在源域上能够很好地区分不同类别,但在目标域上的类别区分能力较差,说明这种训练方式对目标域的适应能力不足。

  • 域适应

运行结果如下:

域适应PCA特征可视化
使用域对抗损失进行训练时,模型在源域和目标域上的类别分类准确率都较高,说明域对抗训练能够有效提升模型在目标域上的适应能力。


点击标题查阅往期内容

图片

Python深度学习GRU、LSTM 、BiLSTM-CNN神经网络空气质量指数AQI时间序列预测及机器学习分析|数据分享

outside_default.png

左右滑动查看更多

outside_default.png

01

图片

02

图片

03

图片

04

图片

  • 更深的域分类器的域适应

运行结果如下:

更深域分类器的域适应PCA特征可视化
使用更深的域分类器进行域适应训练时,在多次实验中似乎更能可靠地合并域,同时保持较高的类别分类准确率。

MNIST - DANN

数据处理

在数据处理阶段,我们对MNIST和MNIST - M数据集进行了预处理。对于MNIST数据,将其转换为适合卷积神经网络输入的格式,并扩展为三通道图像。MNIST - M数据则直接从之前生成的 pkl 文件中加载。通过计算像素均值,我们对数据进行归一化处理,这有助于提高模型的训练效果。最后,创建了一个混合数据集用于后续的TSNE可视化,方便我们直观地观察模型在不同域上的特征分布情况。

数据可视化

MNIST训练数据可视化
MNIST - M训练数据可视化
通过 函数对MNIST和MNIST - M的训练数据进行可视化展示,我们可以直观地看到两个数据集之间的差异,这也体现了域适应问题的挑战性,即不同域之间的数据分布存在明显差异。

构建模型
# 特征提取器 - CNN模型b\_conv1 = bias\_variable(\[48\])h\_conv1 = tf.nn.relu(conv2d(h\_pool0, W\_conv1) + b\_conv1)h\_pool1 = max\_pool\_2x2(h\_conv1)self.feature = tf.reshape(h_pool1, \[-1, 7 * 7 * 48\])# 标签预测器 - MLP模型with tf.variable\_scope('label\_predictor'):W\_fc2 = weight\_variable(\[100, 10\])b\_fc2 = bias\_variable(\[10\])logits = tf.matmul(h\_fc1, W\_fc2) + b_fc2self.pred = tf.nn.softmax(logits)self.pred\_loss = tf.nn.softmax\_cross\_entropy\_with\_logits(logits=logits, labels=self.classify\_labels)# 域预测器 - 小MLP模型,带有对抗损失d\_b\_fc1 = bias_variable(\[2\])d\_logits = tf.matmul(d\_h\_fc0, d\_W\_fc1) + d\_b_fc1self.domain\_pred = tf.nn.softmax(d\_logits)self.domain\_loss = tf.nn.softmax\_cross\_entropy\_with\_logits(logits=d\_logits, labels=self.domain)

该模型主要由三个部分组成:特征提取器、标签预测器和域预测器。特征提取器使用卷积神经网络(CNN)从输入图像中提取特征;标签预测器是一个多层感知机(MLP),用于对图像的类别进行预测;域预测器同样是一个MLP,用于判断输入数据来自源域还是目标域。在域预测器中,使用了梯度反转层 flip_gradient 来实现对抗训练,使得特征提取器学习到的特征能够在不同域之间具有不变性。

模型训练与评估

上述代码实现了两种训练模式:仅在源域上训练(source)和使用域对抗训练(dann)。在训练过程中,根据论文中的方法动态调整适应参数 l 和学习率 lr
运行结果如下:

从结果可以看出,仅在源域上训练时,模型在源域(MNIST)上有较高的准确率,但在目标域(MNIST - M)上的准确率较低,说明模型对目标域的适应能力较差。而使用域对抗训练后,虽然源域的准确率略有下降,但目标域的准确率有了显著提升,表明域对抗训练有效地提高了模型在不同域之间的泛化能力。

特征可视化
plot\_embedding(dann\_tsne



通过t - 分布随机邻域嵌入(t - SNE)方法将高维特征映射到二维空间进行可视化。从可视化结果可以直观地看到,仅在源域上训练时,源域和目标域的数据在特征空间中分离明显,说明模型没有学习到域不变的特征。而使用域对抗训练后,源域和目标域的数据在特征空间中更加接近,表明模型学习到了更具泛化性的特征,能够更好地适应不同的域。

结论

本文详细介绍了基于TensorFlow实现的神经网络对抗训练域适应方法。通过梯度反转层和域对抗训练,模型能够学习到域不变的特征,从而提高在目标域上的分类性能。在MNIST和Blobs数据集上的实验结果表明,域对抗训练相比于仅在源域上训练,能够显著提升模型在目标域上的准确率。同时,通过特征可视化可以直观地观察到域对抗训练对特征分布的影响,进一步验证了该方法的有效性。未来的研究可以考虑在更复杂的数据集和任务上应用该方法,以及探索如何进一步优化域对抗训练的效果。

51bd572e19763413fa4305aa0bf7cb74.jpeg

本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 

9abd819f3baa7822a6f3980cc246d44a.png


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

c077c72f8b5492841e42c58541b75f42.png

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《TensorFlow域对抗训练DANN神经网络梯度反转层分析MNIST 与Blobs数据集提升目标域适应能力可视化》。

点击标题查阅往期内容

Python深度学习GRU、LSTM 、BiLSTM-CNN神经网络空气质量指数AQI时间序列预测及机器学习分析|数据分享

【视频讲解】共享单车使用量预测:RNN, LSTM,GRU循环神经网络和传统机器学习|数据分享

视频:Python深度学习量化交易策略、股价预测:LSTM、GRU深度门控循环神经网络|附代码数据

Python用GRU神经网络模型预测比特币价格时间序列数据2案例可视化|附代码数据

【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

用PyTorch机器学习神经网络分类预测银行客户流失模型

PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

R语言深度学习:用keras神经网络回归模型预测时间序列数据

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

MATLAB中用BP神经网络预测人体脂肪百分比数据

Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

R语言实现CNN(卷积神经网络)模型进行回归数据分析

SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

Python使用神经网络进行简单文本分类

R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

R语言基于递归神经网络RNN的温度时间序列预测

R语言神经网络模型预测车辆数量时间序列

R语言中的BP神经网络模型分析学生成绩

matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

R语言实现拟合神经网络预测和结果可视化

用R语言实现神经网络预测股票实例

使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

30bb6807e71519e89fdfec2220abedfe.jpeg

a2b490b858f64d12913866789e18b32e.png

ec66c7b1a5bd37b5c1dfdfde0edfc782.png

c8827c4e8491a41065b20f03eeb82c70.jpeg

41efcd362595416e0e661cff34d9c81a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/69363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF基础(2):数据包详解

OSPF数据包(可抓包) OSPF报文直接封装在IP报文中,协议号89 头部数据包内容: 版本(Version):对于OSPFv2,该字段值恒为2(使用在IPV4中);对于OSPFv3,该字段值恒为3(使用在IPV6中)。类型(Message Type):该OSPF报文的类型。…

在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。

题目:在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。 延时函数分析LED首先实现8个数码管单独依次显示0~9的数字所有数码管一起同时显示0~F的值,如此往…

使用VCS对Verilog/System Verilog进行单步调试的步骤

Verilog单步调试: System Verilog进行单步调试的步骤如下: 1. 编译设计 使用-debug_all或-debug_pp选项编译设计,生成调试信息。 我的4个文件: 1.led.v module led(input clk,input rst_n,output reg led );reg [7:0] cnt;alwa…

数据结构及排序算法

数据结构 线性结构 ◆线性结构:每个元素最多只有一个出度和一个入度,表现为一条线状。线性表按存储方式分为顺序表和链表。 存储结构: ◆顺序存储:用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素物理上也相邻。 ◆链式存储:存储各数据元素的结点…

python实现多路视频,多窗口播放功能

系列Python开发 文章目录 系列Python开发前言一、python实现多路视频播放功能二、代码实现1. http申请视频流地址并cv2播放功能 三、打包代码实现生成可执行文件 总结 前言 一、python实现多路视频播放功能 服务端开发后通常需要做功能测试、性能测试,通常postman、…

【R语言】数据操作

一、查看和编辑数据 1、查看数据 直接打印到控制台 x <- data.frame(a1:20, b21:30) x View()函数 此函数可以将数据以电子表格的形式进行展示。 用reshape2包中的tips进行举例&#xff1a; library("reshape2") View(tips) head()函数 查看前几行数据&…

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

STM32 软件SPI读写W25Q64

接线图 功能函数 //写SS函数 void My_W_SS(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue); }//写SCK函数 void My_W_SCK(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue); }//写MOSI函数 void My_W_MOSI(uint8_t Bit…

apachePoi中XSSFClientAnchor图片坐标简述;填充多张图片

概述 业务中经常会遇到在单元格内填充图片的需求&#xff0c;而且要求指定图片在单元格内的位置。 一般都是用的apache的poi&#xff0c;设置图片坐标。 HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2)dx1 dy1 起始单元…

Centos挂载镜像制作本地yum源,并补装图形界面

内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录&#xff0c;后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…

ssti学习笔记(服务器端模板注入)

目录 一&#xff0c;ssti是什么 二&#xff0c;原理 所谓模板引擎&#xff08;三列&#xff0c;可滑动查看&#xff09; 三&#xff0c;漏洞复现 1&#xff0c;如何判断其所属的模板引擎&#xff1f; 2&#xff0c;判断清楚后开始注入 &#xff08;1&#xff09;Jinja2&a…

【前端】Python 闭包与JavaScript闭包的实现差异

目录 Python 闭包JavaScript 闭包 推荐超级课程&#xff1a; Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 Python 闭包 如何定义&#xff1a; 在一个函数内部定义另一个函数&#xff0c;内部函数引用外部函数的变量。 def outer_function(text):…

【JVM详解二】常量池

一、常量池概述 JVM的常量池主要有以下几种&#xff1a; class文件常量池运行时常量池字符串常量池基本类型包装类常量池 它们相互之间关系大致如下图所示&#xff1a; 每个 class 的字节码文件中都有一个常量池&#xff0c;里面是编译后即知的该 class 会用到的字面量与符号引…

人工智能入门 数学基础 线性代数 笔记

必备的数学知识是理解人工智能不可或缺的要素&#xff0c;今天的种种人工智能技术归根到底都建立在数学模型之上&#xff0c;而这些数学模型又都离不开线性代数&#xff08;linear algebra&#xff09;的理论框架。 线性代数的核心意义&#xff1a;世间万事万物都可以被抽象成某…

C# Winform怎么设计串口,客户端和相机控件界面显示

首先我们必须把这个类创建好 INIAPI using System; using System.Text; using System.Runtime.InteropServices;namespace Ini {public class IniAPI{#region INI文件操作/** 针对INI文件的API操作方法&#xff0c;其中的节点&#xff08;Section)、键&#xff08;KEY&#x…

在 Windows 上使用 ZIP 包安装 MySQL 的详细步骤

以下是使用官方 ZIP 包在 Windows 上安装 MySQL 的详细步骤&#xff0c;确保能通过 mysql -uroot -p 成功连接。 步骤 1&#xff1a;下载 MySQL ZIP 包 访问 MySQL 官方下载页面&#xff1a; https://dev.mysql.com/downloads/mysql/选择 Windows (x86, 64-bit), ZIP Archive&…

el-table表格点击单元格实现编辑

使用 el-table 和 el-table-column 创建表格。在单元格的默认插槽中&#xff0c;使用 div 显示文本内容&#xff0c;单击时触发编辑功能。使用 el-input 组件在单元格中显示编辑框。data() 方法中定义了 tableData&#xff0c;tabClickIndex: null,tabClickLabel: ,用于判断是否…

Windows逆向工程入门之汇编环境搭建

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 Visual Studio逆向工程配置 基础环境搭建 Visual Studio 官方下载地址安装配置选项(后期可随时通过VS调整) 使用C的桌面开发 拓展可选选项 MASM汇编框架 配置MASM汇编项目 创建新项目 选择空…

手写一个C++ Android Binder服务及源码分析

手写一个C Android Binder服务及源码分析 前言一、 基于C语言编写Android Binder跨进程通信Demo总结及改进二、C语言编写自己的Binder服务Demo1. binder服务demo功能介绍2. binder服务demo代码结构图3. binder服务demo代码实现3.1 IHelloService.h代码实现3.2 BnHelloService.c…

DeepSeekMoE 论文解读:混合专家架构的效能革新者

论文链接&#xff1a;DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models 目录 一、引言二、背景知识&#xff08;一&#xff09;MoE架构概述&#xff08;二&#xff09;现有MoE架构的问题 三、DeepSeekMoE架构详解&#xff08;一&a…