GAN网络调参经验

GAN训练 在生成对抗网络(GAN)中,鉴别器(Discriminator)和生成器(Generator)是两个相互对抗的神经网络。训练过程可以分为两个主要阶段:鉴别器训练和生成器训练。 阅读详情
AI摘要

本文深入探讨生成对抗网络(GAN)的训练难题,分享了作者在设计网络结构与调整参数方面的宝贵经验,涵盖损失函数选择、模型容量增加、标签与噪声应用、batch normalization使用等关键点。

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.youkuaiyun.com/qq_38262728/article/details/98327082


自从 GAN 提出后,它变得越来越火热,吸引了众多的爱好者前来学习实践。

但是只要你自己去从无到有写出一个 GAN 模型并运行,除非你运气太好,大多数情况下你都会发现自己的GAN并不能很好地 work 。

下面首先对 GAN 进行简要的介绍,然后整理了我自己在 GAN 的设计网络结构、调整参数等方面的经验。

1 什么是GAN?

GAN 是一种生成模型,由知名的学者 Ian Goodfellow 首先提出,并给出了实验结果和理论推导 https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf 。

它以造假币为例对 GAN 的工作原理进行解释,生成器(Generator)就像造假币的人,判别器(Discriminator)就像警察,原始数据的分布类比于真钱,生成的数据分布类比于假钱。

造假币的人不断模仿真钱去造假币,造出来的钱混入真钱一同交给警察去判断。造假币的人的目的是让自己造出来的假币不断逼近于真钱,而警察既需要认出假钱、又不能冤枉真钱。

两者以此方式,不断地对抗提升自己造假和打假的能力,最终理想的结果是使得造假币的人能造出几乎无法辨识的假钱成功迷惑警察。

2 GAN存在的问题

  • 训练不稳定,损失值波动幅度大
  • 判别器收敛迅速,损失值快速降到零
  • 生成器无能为力,损失函数不断增大

3 训练的经验

3.1 不要纠结于损失函数的选择

刚开始你可能会认为损失函数对结果会产生较大的影响,但是实践证明,一般来说其对结果的影响一般并没有你想象的那样大。

因此,对于 GAN 理论入门不久,正在打开实践大门的人,我的建议是选择最简单的损失函数就可以开始实验了。

因为后续还有好多事情值得你去头疼,微调损失函数可以留到最后一步再考虑。

3.2 关于增加模型的容量

当GAN生成的图像不够准确、清晰时,可尝试增加卷积层中的卷积核的大小和数量,特别是初始的卷积层。

卷积核的增大可以增加卷积的视野域,平滑卷积层的学习过程,使得训练不过分快速地收敛。

增加卷积核数(特别是生成器),可以增加网络的参数数量和复杂度,增加网络的学习能力。

但同时也可能存在,增加生成器的模型 capacity 但是对于它快速被判别器打败的事实无济于事的情况,每个人都使用不同的模型和数据,会有不同的情况,需要具体问题具体分析。

3.3 尝试改变标签

如果使用的是真实数据标签为1,生成数据标签为0的分配方法,可将其交换为真实数据标签为0,生成数据标签为1。

这个小技巧会帮助网络在早期快速进行梯度计算,帮助稳定训练过程。

此外,还可使用软标签和带噪声的标签。

所谓软标签指不是使用0和1作为标签,而是使用和0或1接近的小数来标记,这样会减弱梯度的传播速度,稳定训练。

而使用带噪声的标签指对少数的标签进行随机的扰动,这也是一个帮助训练的小技巧。

3.4 尝试使用 batch normalization

我在实践的过程中使用 batch normalization ,发现对结果的提升具有明显的帮助,它在每一层都对数据进行归一化,有利于防止数据发散,进而保护训练的过程与结果的稳定性。

3.5 尝试分次训练

对于一般的 GAN 模型和多分类问题,最好分次训练,一次只训练一个类别,以降低网络训练的难度并提高准确性。

而对于条件 GAN 等,比如可以将类比标签一同作为输入,以类别为先验条件的 GAN ,可适度增大训练的难度。

3.6 最好不要提早结束

有时候我们会看到自己模型的损失函数在几个batch训练过后就停止波动了,但是这个时候先不要为了节省时间而提前停止训练,实践证明这个时候网络很可能仍然在不断地调整结构中。

有时候损失函数也可能突然出现很大的异常波动,这个时候也不要马上提前停止训练,多观察一会儿。

非常建议在训练的过程中,通过保存等方式不断记录当前时刻下的训练结果。通过对结果图像的观察分析来判断训练的过程,损失函数可能会一时蒙蔽双眼,结果应该不会。

因此除非损失马上收敛到接近于0,否则耐心地等待网络训练完再评估结果,调整网络结构和参数。

3.7 关于k的选择

原论文中的 k 指每优化一次生成器的损失函数,优化判别器的损失函数 k 次。

但是在实验中,经常出现判别器迅速打败生成器的情况(即判别器的损失函数快速下降,生成器快速上升)。

于是常规的思路,就是增加生成器的训练次数。没训练一次判别器,训练k次生成器。这样可以增加生成器的学习次数,使得训练在开始时稍稳定。

然而实践证明,如果判别器真的比生成器强太多,这种调节k只是让结果崩溃来的晚一些。或者说只是相当于节省了少训练几次判别器的时间,稍稍提升了结果。

我个人不建议出问题就改k的习惯,还是应该从网络结构本身找问题所在才是治本的关键。

3.8 关于学习率

调整学习率是解决生成器崩溃的一剂良方。

当出现崩溃时,尝试降低学习率,可能会带来意想不到的效果。

3.9 增加噪声

与标签噪声相似,还可在数据中引入一定量的噪声,大多数情况下都能 work 。
在这里插入图片描述

3.10 不要使用性能太好的判别器

WGAN论文提到过,若使用性能过好的判别器可能会使得判别器的损失函数在训练一开始就降到非常低,后续对抗无法继续进行,或者使得训练出来的生成器性能不够好。

3.10 可以尝试最新的multi-scale gradient方法

https://arxiv.org/abs/1903.06048

对于稳定训练帮助很大。

3.11 可以尝试使用TTUR

https://arxiv.org/abs/1706.08500

对于生成器和判别器使用不同的学习率,看似简单的 trick 对结果的提升却有奇效。

3.12 使用Spectral Normalization

https://arxiv.org/abs/1802.05957

对卷积核使用Spectral Normalization,极力安利。

4 正常的损失函数波动情况

目前来看,正常的损失函数应该是:

  • 训练初始,生成器和判别器的损失函数快速波动,但是大致都分别朝着增大或减小的方向。
  • 趋于稳定后,生成器和判别器的损失函数在小的范围内做上下波动,此时模型趋于稳定。

参考

[1] https://arxiv.org/pdf/1406.2661.pdf
[2] https://mp.weixin.qq.com/s?__biz=MzUzNTA1NTQ3NA==&mid=2247486336&idx=1&sn=57c9fe8324a1addd73016c2f9dad4db8&chksm=fa8a169dcdfd9f8b17a02ab37eba61fdb3a1d89f694eaf89e2159275a553efe81c848e9a597c&mpshare=1&scene=1&srcid=&sharer_sharetime=1564758935068&sharer_shareid=f48c6499a7bee75abed9252093ec8062&key=83b29471f317cf4cb4c43b8d6f0f7141528141839d921d9fa05354867868f61243968a92b031ba8d4867003242ab09f1ca621380db5b7bc77bfcab13dc9cc7a0960adac628f5a805694c9fef0468a345&ascene=1&uin=MjYxNDk4MjcwNg%3D%3D&devicetype=Windows+10&version=62060833&lang=zh_CN&pass_ticket=RHjQjboJdAJhysQNM17TfCzpyiuR4K3LIS%2FvyT9wAnt%2BBDxNq0hsDyAO0BNEjE6l
[3] https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628

                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e44c3c0e64.css" rel="stylesheet">
                </div>

更多《计算机视觉与图形学》知识,可关注下方公众号:
在这里插入图片描述

MNIST手写数字GAN实战:从零搭建可调试的生成对抗网络 生成对抗网络(GAN)是一种通过对抗学习模拟数据分布的生成式模型,其核心在于生成器与判别器的动态博弈。理解GAN不能止步于公式推导,而需深入梯度流动、损失设计与训练稳定性等工程本质。本文以MNIST手写数字为切入点,聚焦全连接结构GAN的可解释性实现,详解噪声输入分布、LeakyReLU梯度保持、[-1,1]数据归一化、非饱和损失函数等关键技术选择,并揭示判别器过强、模式崩溃、梯度消失等典型失效现象的归因逻辑。适用于PyTorch初学者与生成模型实践者,提供可复现、可中断、可可视化调试的端到端落地路径。 阅读详情

相关推荐

条件GAN实战指南:从原理到复现,解决条件控制与训练稳定性难题

生成对抗网络(GAN)能生成逼真图像,但无条件GAN的输出完全随机、不可控。条件GAN(cGAN)通过将条件信息同时注入生成器和判别器,实现了按需定制生成,例如指定类别或属性。其核心原理是让判别器判断图像与条件是否匹配,从而引导生成器学习条件分布。技术价值在于将生成模型从随机采样升级为可控生成,广泛应用于图像编辑、数据增强和跨模态生成等场景。然而,训练中常面临条件信息被稀释、判别器过强导致梯度消失等挑战。本文深入拆解cGAN的论文设计,分享从MNIST到CIFAR-10的复现经验,并总结条件注入机制与调参技

weixin_29032489的博客 303

生成对抗网络(GAN)学习笔记——GAN是如何来训练的?

GAN有两个网络模型,生成网络和判别网络,这两个网络是相对独立的,那么如何对这两个模型进行训练呢? 采用生成器和判别器交替迭代训练(两者博弈的过程)。 交替迭代训练 1.首先,我们得到初始的真假数据集。给生成器一个随机的输入(初始化),生成器输出一个假的样本集(未训练时效果非常差,也就是非常假),同时我们有真实的样本集(标签数据),于是我们得到了真假数据集。 2.有了真假数据集后,固定生成器的参数不变,对判别器进行训练。训练过程是一个有监督的二分类问题,即给定一个样本,训练判别器能判断出...

Jelly_11的博客 9230

GAN训练的过程(图解)

小鹏AI 4228

对抗网络GAN详解:GAN训练不稳定解决方法、GAN中使用的深度学习技巧、GAN使用任务领域、GAN资料大全整理

对抗网络GAN详解:GAN训练不稳定解决方法、GAN中使用的深度学习技巧、GAN使用任务领域、GAN资料大全整理

丨汀、的博客 9020

人工智能、深度学习、机器学习常见面试题56~70

生成对抗网络的一个简单解释如下:假设有两个模型,一个是生成模型(Generative Model,下文简写G),一个是判别模型(Discriminative Model,下文简写D),判别模型(D)的任务就是判断一个实例是真实的还是由模型生成的,生成模型(G)的任务是生成一个实例来骗过判别模型(D),两个模型互相对抗,发展下去就会达到一个平衡,生成模型生成的实例与真实的没有区别,判别模型无法区分自然的还是模型生成的。当梯度下降过程中,模型的目标函数取得了较高的误差时,梯度将被送到远离决策面的位置。...

FPGA/MATLAB学习教程/源码/项目合作开发 1064

GAN行人重识别:数据增强与特征对齐实战指南

生成对抗网络(GAN)是深度学习领域的重要生成模型,通过生成器与判别器的对抗博弈,学习真实数据分布。在计算机视觉任务中,GAN常被用于图像生成与风格迁移。行人重识别旨在跨摄像头检索同一行人,是智慧安防、视频监控的核心技术之一。由于不同摄像头下的光照、视角差异,行人外观特征存在显著漂移,导致识别率下降。将GAN引入行人重识别,一方面可通过风格迁移实现数据增强,扩充训练样本多样性;另一方面可通过对抗训练对齐跨域特征,提升模型的泛化能力。本文围绕一份完整的Python源码,从环境配置、数据预处理到训练调参,系统讲

weixin_33139275的博客 149

GAN的训练技巧:炼丹师养成计划 ——生成式对抗网络训练、调参和改进

GAN最重要的就是找到D与G之间的纳什均衡,但是在实际中会发现GAN的训练不稳定,训练方法不佳很容易出现模式崩溃等问题,本篇将记录一些训练技巧,不一定适合你的模型,也可能有疏漏和错误,供学习参考,欢迎指正和补充。

白洞,白色的明天在等着我们 1万+

基于Python的GAN图像修复模型:从原理到实战全攻略

深度学习技术近年来在计算机视觉领域不断落地,图像修复作为其中兼具理论研究价值与工程实操性的方向,逐渐成为毕业设计和课程设计的热门选题。图像修复的本质是在理解全局语义结构的基础上,合理补全局部缺失区域,这背后涉及卷积神经网络、生成对抗网络、损失函数设计等一系列核心概念。GAN通过生成器与判别器的博弈,大幅提升了修复结果的纹理真实度与视觉自然度,相比传统插值方法和纯CNN方案具有显著优势。该技术可广泛应用于老照片修复、文物数字化、图像编辑等场景,也是入门对抗生成网络的最佳实践项目之一。本文围绕基于Python实

weixin_42524100的博客 217

如何训练GAN?训练GAN的技巧和方法

https://github.com/soumith/ganhacks 1.输入归一化 把信号归一化到-1 到1 generator的最后一层输出用Tanh 2.使用修饰过后的损失函数 在GAN的文章中,generator的损失函数是min(log 1-D) 但是在实际中会用max(log D) 因为前一个式子在早期会有梯度消失的问题 Goodfellow et. al (2014) 在实际中的好方法: 训练生成器时翻转标签:real = fake, fake = real 3.使用球体Z

Stephanie的博客 9687

MATLAB实现生成对抗网络:从DCGAN到训练调参实战解析

生成对抗网络(GAN)是深度学习中实现图像生成、数据增强与异常检测的核心技术之一,其通过生成器与判别器的博弈学习真实数据分布。MATLAB作为工程与科研领域广泛使用的计算环境,凭借Deep Learning Toolbox提供的自动微分、GPU加速与可视化能力,已能高效搭建和训练GAN模型。本文从GAN的基本原理出发,讲解在MATLAB中定义生成器与判别器、实现DCGAN训练循环、调整学习率与损失函数等关键环节,并针对模式崩溃、显存不足等常见问题给出排查经验。无论你是进行毕业设计、工业视觉检测,还是科研复现

weixin_32612263的博客 326

【脑电绘图教程 2】使用Brainstorm进行脑电处理及源定位

Brainstorm 是一个开源应用程序,支持MEG、EEG、fNIRS、ECoG、深度电极和其他电生理学的数据分析,尤其用于MEG、EEG的源定位。Brainstorm的主要优点是其简单直观的图形界面,不需要进行任何编程,即可上手MEG、EEG分析,此外,它还支持多种数据类型(基本上EEGLab支持的,它都支持),并且具有数据批量处理功能,可以很方便的分析自己的数据。

qq_40735196的博客 1万+

深度学习-关于GAN网络调参的经验

文章目录 1 什么是GAN? 2 GAN存在的问题 3 训练的经验 3.1 不要纠结于损失函数的选择 3.2 关于增加模型的容量 3.3 尝试改变标签 3.4 尝试使用 batch normalization 3.5 尝试分次训练 3.6 最好不要提早结束 3.7 关于k的选择 3.8 关于学习率 3.9 增加噪声 3.10 不要使用性能太好的判别器 3.10 可以尝试最新的multi-scale gradient方法 3.11 可以尝试使用TTUR

记录学习的小白 4347

【若依(ruoyi)】BootstrapTable列宽定制实战:突破width属性限制的两种方案

本文针对若依(RuoYi)框架中BootstrapTable组件列宽设置失效的常见问题,提供了两种实战解决方案。通过CSS样式覆盖法强制定义列宽,或利用formatter函数进行动态HTML包裹,有效突破width属性限制,实现精准的表格列宽定制。

weixin_29013129的博客 175

用 GAN 生成手写数字图像(附代码,轻量可在本地训练)

生成器 G:输入一段随机噪声,输出一张图像,目标是“骗过”判别器;判别器 D:输入一张图像,判断其是真实样本还是生成样本。G 和 D 相互对抗,G 不断学习如何生成更加真实的图像,D 不断提高识别真假图像的能力,最终达到一个动态平衡。

m0_74167177的博客 1438

k8s重装1.28.2+calico+踩坑收集+InPlacePodVerticalScaling

它提供了从镜像构建(通过 Dockerfile)、镜像管理(上传、下载、存储等)、容器创建、运行、网络配置(可以为容器分配自定义的网络,如 bridge 网络、host 网络等)到容器编排(通过 Docker Compose 可以简单地编排多个容器的启动和关联关系)等一整套完整的解决方案。它的核心功能是启动和管理容器的生命周期。sudo apt update这个可以经常用,是来更新软件包的,它不下载,所以没风险,但是经常会报错,别问,问就是某种强大的力量,所以用镜像或者代理或者巴拉巴拉。

SsjjsS2019的博客 2554

告别密码!用VScode+SSH一键连接树莓派,再也不用每次输密码了

本文详细介绍了如何通过VScode和SSH密钥实现树莓派的免密连接,告别繁琐的密码输入。从开发环境准备、SSH密钥生成与配置,到VScode远程连接优化和常见问题排查,提供了一套完整的解决方案,帮助开发者提升工作效率。

weixin_28831341的博客 173

从GAN到WGAN-GP:生成对抗网络的进化之路与实战详解

摘要:本文系统梳理了生成对抗网络(GAN)从原始版本到WGAN-GP的演进过程。原始GAN存在模式崩溃、梯度消失等训练难题,WGAN通过引入Wasserstein距离解决了这些问题,而WGAN-GP进一步用梯度惩罚替代权重裁剪,实现了更稳定的训练。文章详细阐述了理论原理,包括JS散度的局限性和Wasserstein距离的优势,并提供了完整的PyTorch实现指南。实验表明,WGAN-GP在图像生成、数据增强等任务中表现优异,其核心思想对现代生成模型仍具重要影响。

油墨香^-^的博客 438

STM32开发实战:从嵌入式系统到硬件控制 | 你必须得会

🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1046

深度生成模型全解析:从VAE到GAN的数学原理与实战避坑指南

深度生成模型旨在学习高维数据分布,从而生成新样本。其核心原理是通过概率图模型分解联合分布,或利用神经网络参数化生成过程。技术价值在于无监督表示学习与数据增强,广泛应用于图像生成、风格迁移等场景。变分自编码器(VAE)通过变分下界和重参数化技巧实现稳定训练,而生成对抗网络(GAN)则借助极小极大博弈提升生成质量。本文深入剖析有向生成网络、VAE、GAN及生成矩匹配网络,涵盖数学直觉、架构选型与实操经验,助你掌握生成模型的核心技术与避坑策略。

weixin_29052717的博客 294

高速数字信号硬件设计:灵巧手方向核心技能与实战解析

在机器人产业加速演进的今天,灵巧手等高自由度末端执行器对硬件电路设计提出了更高要求。传统硬件工程师熟悉功能、功耗与EMC,而灵巧手设计还需在极小空间内融合多路电机驱动、高速数字接口与微弱模拟信号采集。信号完整性与电源完整性成为决定系统稳定性的关键:信号上升沿决定有效带宽,阻抗匹配、回流路径和去耦策略直接影响通信质量与抗干扰能力。从阻抗计算、等长设计到FPC布线,再到电源预算与纹波抑制,这些高速数字信号设计基础原理不仅适用于服务器主板,更是灵巧手控制器开发与调试的必修课。本文面向从事机器人硬件、嵌入式系统与电

weixin_29172963的博客 238

富芮坤fr8008gp 240X280 lvgl项目启动

fr8008gp_240X280_lvgl项目启动

cheng___yi的博客 1758

GAN训练避坑指南:模式崩溃、训练不稳定与梯度消失的改进方案

生成对抗网络(GAN)通过生成器与判别器的博弈学习数据分布,但其训练过程常面临模式崩溃、训练不稳定和梯度消失等挑战。模式崩溃源于生成器倾向于生成单一模式以欺骗判别器,训练不稳定则因博弈失衡导致损失震荡,梯度消失则发生在判别器过强时生成器无法获得有效梯度。这些缺陷相互关联,影响生成样本的多样性和质量。为应对这些问题,业界提出了小批量判别、特征匹配、WGAN、谱归一化、非饱和损失等改进方案,并在图像生成、风格迁移等场景中验证了有效性。本文深入剖析这些缺陷的成因,并结合实战经验给出调参和结构改进建议,帮助读者提升

weixin_29050271的博客 127

基于Slim-Neck架构的YOLOv11轻量化特征融合方案(实现超轻量级与高精度的双重突破)

购买即可解锁800+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,每日更新。

m0_64661770的博客 251

GAN的训练心得技巧(汇总)

训练WGAN的时候,有几个方面可以调参: a. 调节Generator loss中GAN loss的权重。 G loss和Gan loss在一个尺度上或者G loss比Gan loss大一个尺度。但是千万不能让Gan loss占主导地位, 这样整个网络权重会被带偏。 b. 调节Generator和Discrimnator的训练次数比。一般来说,Discrimnator要训练的比Gene...

qxqsunshine的博客 4967

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

从零实现DCGAN:Keras生成对抗网络实战与调参避坑指南

生成对抗网络(GAN)通过生成器与判别器的博弈学习数据分布,而DCGAN利用卷积神经网络显著提升了训练稳定性与生成质量。其核心在于转置卷积上采样、批归一化及去除池化层等设计,使模型能从随机噪声生成逼真图像。在图像生成、数据增强等场景中,DCGAN是入门生成模型的经典实践。本文基于Keras完整拆解DCGAN实现,涵盖网络搭建、损失函数、训练循环及调参技巧,并分享模式崩溃排查与训练效率优化的实战经验,助你快速上手生成模型开发。

weixin_32597009的博客 231

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 视频语言调查-VATEX: A Large-Scale, High-Quality Multilingual Dataset for Video-and-Language Research
下一篇: VAE(Variational Autoencoder)的原理
元宇宙MetaAI
博客等级 码龄10年 331粉丝 333原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值