ACGAN
CGAN通过在生成器和判别器中均使用标签信息进行训练,不仅能产生特定标签的数据,还能够提高生成数据的质量;SGAN(Semi-Supervised GAN)通过使判别器/分类器重建标签信息来提高生成数据的质量。既然这两种思路都可以提高生成数据的质量,于是ACGAN综合了以上两种思路,既使用标签信息进行训练,同时也重建标签信息,结合CGAN和SGAN的优点,从而进一步提升生成样本的质量,并且还能根据指定的标签相应的样本。
1. ACGAN的网络结构为:
ACGAN的网络结构框图
生成器的输入包含C_vector和Noise_data两个部分,其中C_vector为训练数据标签信息的One-hot编码张量,其形状为:(batch_size, num_class) ;Noise_data的形状为:(batch_size, latent_dim)。然后将两者进行拼接,拼接完成后,得到的输入张量为:(batch_size, num_class + latent_dim)。生成器的的输出张量为:(batch_size, channel, Height, Width)。
判别器的输入为:(batch_size, channel, Height, Width); 判别的器的输出为两部分,一部分是源数据真假的判断,形状为:(batch_size, 1),一部分是输入数据的分类结果,形状为:(batch_size, class_num)。因此判别器的最后一层有两个并列的全连接层,分别得到这两部分的输出结果,即判别器的输出有两个张量(真假判断张量和分类结果张量)。
2. ACGAN的损失函数:
对于判别器而言,既希望分类正确,又希望能正确分辨数据的真假;对于生成器而言,也希望能够分类正确,当时希望判别器不能正确分辨假数据。
D_real, C_real = Discriminator( real_imgs) # real_img 为输入的真实训练图片
D_real_loss = torch.nn.BCELoss(D_real, Y_real) # Y_real为真实数据的标签,真数据都为-1,假数据都为+1
C_real_loss = torch.nn.CrossEntropyLoss(C_real, Y_vec) # Y_vec为训练数据One-hot编码的标签张量
gen_imgs = Generator(noise, Y_vec)
D_fake, C_fake = Discriminator(gen_imgs)
D_fake_loss = torch.nn.BCELoss(D_fake, Y_fake)
C_fake_loss = torch.nn.CrossEntropyLoss(C_fake, Y_vec)
D_loss = D_real_loss + C_real_loss + D_fake_loss + C_fake_loss
生成器的损失函数:
gen_imgs = Generator(noise, Y_vec)
D_fake, C_fake = Discriminator(gen_imgs)
D_fake_loss = torch.nn.BCELoss(D_fake, Y_real)
C_fake_loss = torch.nn.CrossEntropyLoss(C_fake, Y_vec)
G_loss = D_fake_loss + C_fake_loss
class Discriminator(nn.Module): # 定义判别器def __init__(self, img_size=(64, 64), num_classes=2): # 初始化方法super(Discriminator, self).__init__() # 继承初始化方法self.img_size = img_size # 图片尺寸,默认为(64.64)三通道图片self.num_classes = num_classes # 类别数self.conv1 = nn.Conv2d(3, 128, 4, 2, 1) # conv操作self.conv2 = nn.Conv2d(128, 256, 4, 2, 1) # conv操作self.bn2 = nn.BatchNorm2d(256) # bn操作self.conv3 = nn.Conv2d(256, 512, 4, 2, 1) # conv操作self.bn3 = nn.BatchNorm2d(512) # bn操作self.conv4 = nn.Conv2d(512, 1024, 4, 2, 1) # conv操作self.bn4 = nn.BatchNorm2d(1024) # bn操作self.leakyrelu = nn.LeakyReLU(0.2) # leakyrelu激活函数self.linear1 = nn.Linear(int(1024 * (self.img_size[0] / 2 ** 4) * (self.img_size[1] / 2 ** 4)), 1) # linear映射self.linear2 = nn.Linear(int(1024 * (self.img_size[0] / 2 ** 4) * (self.img_size[1] / 2 ** 4)),self.num_classes) # linear映射self.sigmoid = nn.Sigmoid() # sigmoid激活函数self.softmax = nn.Softmax(dim=1) # softmax激活函数self._init_weitghts() # 模型权重初始化def _init_weitghts(self): # 定义模型权重初始化方法for m in self.modules(): # 遍历模型结构if isinstance(m, nn.Conv2d): # 如果当前结构是convnn.init.normal_(m.weight, 0, 0.02) # w采用正态分布初始化nn.init.constant_(m.bias, 0) # b设为0elif isinstance(m, nn.BatchNorm2d): # 如果当前结构是bnnn.init.constant_(m.weight, 1) # w设为1nn.init.constant_(m.bias, 0) # b设为0elif isinstance(m, nn.Linear): # 如果当前结构是linearnn.init.normal_(m.weight, 0, 0.02) # w采用正态分布初始化nn.init.constant_(m.bias, 0) # b设为0def forward(self, x): # 前传函数x = self.conv1(x) # conv,(n,3,64,64)-->(n,128,32,32)x = self.leakyrelu(x) # leakyrelu激活函数x = self.conv2(x) # conv,(n,128,32,32)-->(n,256,16,16)x = self.bn2(x) # bn操作x = self.leakyrelu(x) # leakyrelu激活函数x = self.conv3(x) # conv,(n,256,16,16)-->(n,512,8,8)x = self.bn3(x) # bn操作x = self.leakyrelu(x) # leakyrelu激活函数x = self.conv4(x) # conv,(n,512,8,8)-->(n,1024,4,4)x = self.bn4(x) # bn操作x = self.leakyrelu(x) # leakyrelu激活函数x = torch.flatten(x, 1) # 三维特征压缩至一位特征向量,(n,1024,4,4)-->(n,1024*4*4)# 根据特征向量x,计算图片真假的得分validity = self.linear1(x) # linear映射,(n,1024*4*4)-->(n,1)validity = self.sigmoid(validity) # sigmoid激活函数,将输出压缩至(0,1)# 根据特征向量x,计算图片分类的标签label = self.linear2(x) # linear映射,(n,1024*4*4)-->(n,2)label = self.softmax(label) # softmax激活函数,将输出压缩至(0,1)return (validity, label) # 返回(图像真假的得分,图片分类的标签)class Generator(nn.Module): # 定义生成器def __init__(self, img_size=(64, 64), num_classes=2, latent_dim=100): # 初始化方法super(Generator, self).__init__() # 继承初始化方法self.img_size = img_size # 图片尺寸,默认为(64.64)三通道图片self.num_classes = num_classes # 类别数self.latent_dim = latent_dim # 输入噪声长度,默认为100self.linear = nn.Linear(self.latent_dim, 4 * 4 * 1024) # linear映射self.bn0 = nn.BatchNorm2d(1024) # bn操作self.deconv1 = nn.ConvTranspose2d(1024, 512, 4, 2, 1) # transconv操作self.bn1 = nn.BatchNorm2d(512) # bn操作self.deconv2 = nn.ConvTranspose2d(512, 256, 4, 2, 1) # transconv操作self.bn2 = nn.BatchNorm2d(256) # bn操作self.deconv3 = nn.ConvTranspose2d(256, 128, 4, 2, 1) # transconv操作self.bn3 = nn.BatchNorm2d(128) # bn操作self.deconv4 = nn.ConvTranspose2d(128, 3, 4, 2, 1) # transconv操作self.relu = nn.ReLU(inplace=True) # relu激活函数self.tanh = nn.Tanh() # tanh激活函数self.embedding = nn.Embedding(self.num_classes, self.latent_dim) # embedding操作self._init_weitghts() # 模型权重初始化def _init_weitghts(self): # 定义模型权重初始化方法for m in self.modules(): # 遍历模型结构if isinstance(m, nn.ConvTranspose2d): # 如果当前结构是transconvnn.init.normal_(m.weight, 0, 0.02) # w采用正态分布初始化nn.init.constant_(m.bias, 0) # b设为0elif isinstance(m, nn.BatchNorm2d): # 如果当前结构是bnnn.init.constant_(m.weight, 1) # w设为1nn.init.constant_(m.bias, 0) # b设为0elif isinstance(m, nn.Linear): # 如果当前结构是linearnn.init.normal_(m.weight, 0, 0.02) # w采用正态分布初始化nn.init.constant_(m.bias, 0) # b设为0def forward(self, input: tuple): # 前传函数noise, label = input # 从输入的元组中获取噪声向量和标签信息label = self.embedding(label) # 标签信息经过embedding操作,变成与噪声向量尺寸相同的稠密向量z = torch.multiply(noise, label) # 噪声向量与标签稠密向量相乘,得到带有标签信息的噪声向量z = self.linear(z) # linear映射,(n,100)-->(n,1024*4*4)z = z.view((-1, 1024, int(self.img_size[0] / 2 ** 4),int(self.img_size[1] / 2 ** 4))) # 一维特征向量扩展至三维特征,(n,1024*4*4)-->(n,1024,4,4)z = self.bn0(z) # bn操作z = self.relu(z) # relu激活函数z = self.deconv1(z) # trainsconv操作,(n,1024,4,4)-->(n,512,8,8)z = self.bn1(z) # bn操作z = self.relu(z) # relu激活函数z = self.deconv2(z) # trainsconv操作,(n,512,8,8)-->(n,256,16,16)z = self.bn2(z) # bn操作z = self.relu(z) # relu激活函数z = self.deconv3(z) # trainsconv操作,(n,256,16,16)-->(n,128,32,32)z = self.bn3(z) # bn操作z = self.relu(z) # relu激活函数z = self.deconv4(z) # trainsconv操作,(n,128,32,32)-->(n,3,64,64)z = self.tanh(z) # tanh激活函数,将输出压缩至(-1,1)return z # 返回生成图像
相关文章:
ACGAN
CGAN通过在生成器和判别器中均使用标签信息进行训练,不仅能产生特定标签的数据,还能够提高生成数据的质量;SGAN(Semi-Supervised GAN)通过使判别器/分类器重建标签信息来提高生成数据的质量。既然这两种思路都可以提高生成数据的质…...
模块化CSS
1、什么是模块化CSS 模块化CSS是一种将CSS样式表的规则和样式定义封装到模块或组件级别的方法,以便于更好地管理、维护和组织样式代码。这种方法通过将样式与特定的HTML元素或组件相关联,提供了一种更具可维护性、可复用性和隔离性的方式来处理样式。简单…...
意大利储能公司【Energy Dome】完成1500万欧元融资
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于意大利米兰的储能公司Energy Dome今日宣布已完成1500万欧元B轮融资。 本轮融资完成后,Energy Dome的融资总额已经达到了5500万欧元,本轮融资的参与者包括阿曼创新发…...
【Java 进阶篇】JDBC Connection详解:连接到数据库的关键
在Java中,要与数据库进行交互,需要使用Java数据库连接(JDBC)。JDBC允许您连接到不同类型的数据库,并执行SQL查询、插入、更新和删除操作。在JDBC中,连接数据库是一个重要的步骤,而Connection对象…...
vue-cli项目打包体积太大,服务器网速也拉胯(100kb/s),客户打开网站需要等十几秒!!! 尝试cdn优化方案
一、首先用插件webpack-bundle-analyzer查看自己各个包的体积 插件用法参考之前博客 vue-cli项目中,使用webpack-bundle-analyzer进行模块分析,查看各个模块的体积,方便后期代码优化 二、发现有几个插件体积较大,有改成CDN引用的…...
【优秀学员统计】python实现-附ChatGPT解析
1.题目 优秀学员统计 知识点排序统计编程基础 时间限制: 1s 空间限制: 256MB 限定语言:不限 题目描述: 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。每个员工会对应一个id,每天的打卡记录记录…...
餐饮外卖配送小程序商城的作用是什么?
餐饮是支撑市场的主要行业之一,其市场规模很大,从业商家从大到小不计其数,对众商家来说,无论门店大小都希望不断生意增长,但在实际发展中却会面对不少痛点; 餐饮很适合线上经营,无论第三方外卖…...
【QT】使用toBase64方法将.txt文件的明文变为非明文(类似加密)
目录 0.环境 1.背景 2.详细代码 2.1 .h主要代码 2.2 .cpp主要代码,主要实现上述的四个方法 0.环境 windows 11 64位 Qt Creator 4.13.1 1.背景 项目需求:我们项目中有配置文件(类似.txt,但不是这个格式,本文以…...
《QDebug 2023年9月》
一、Qt Widgets 问题交流 1.Qt 程序在 Windows 上以管理员权限运行时无法响应拖放(Drop) 无论是 Widget 还是 QML 程序,以管理员权限运行时,都无法响应拖放操作。可以右键管理员权限打开 Qt Creator,然后丢个文本文件…...
C++使用高斯模糊处理图像
C使用高斯模糊处理图像 cv::GaussianBlur 是 OpenCV 中用于对图像进行高斯模糊处理的函数。高斯模糊是一种常用的图像滤波方法,它可以减少图像中的噪声,并平滑图像以降低细节级别。 void cv::GaussianBlur(const cv::Mat& src, cv::Mat& dst, …...
多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络)
多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络) 目录 多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BP粒子群优化BP神经网络多变量时间序列预测ÿ…...
LeetCode 283. 移动零
移动零 问题描述 LeetCode 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意,必须在不复制数组的情况下原地对数组进行操作。 解决思路 为了将所有 0 移动到数组的末尾&#…...
【数据结构】选择排序 堆排序(二)
目录 一,选择排序 1,基本思想 2, 基本思路 3,思路实现 二,堆排序 1,直接选择排序的特性总结: 2,思路实现 3,源代码 最后祝大家国庆快乐! 一…...
opencv实现目标跟踪及视频转存
创建跟踪器 def createTypeTracker(trackerType): 读取视频第一帧,选择跟踪的目标 读第一帧。 ok, frame video.read() 选择边界框 bbox cv2.selectROI(frame, False) 初始化跟踪器 tracker_type ‘MIL’ tracker createTypeTracker(tracker_type) 用第一…...
R | R及Rstudio安装、运行环境变量及RStudio配置
R | R及Rstudio安装、运行环境变量及RStudio配置 一、介绍1.1 R介绍1.2 RStudio介绍 二、R安装2.1 演示电脑系统2.2 R下载2.3 R安装2.4 R语言运行环境设置(环境变量)2.4.1 目的2.4.2 R-CMD测试2.4.3 设置环境变量 2.5 R安装测试 三、RStudio安装3.1 RStu…...
智能回答机器人的“智能”体现在哪里?
人工智能的广泛应用已经成为当今社会科技发展的趋势之一。通过人工智能技术,我们可以在不同领域中实现自动化、智能化和高效化,从而大大提升生产和生活效率。智能回答机器人的出现和使用便能很好的证明这一点。今天我们就来探讨一下智能会打机器人的“智…...
多网卡场景数据包接收时ip匹配规则
多网卡场景数据包接收时ip匹配规则 mac地址匹配规则 接收数据包时数据包中的目的mac地址匹配接收网卡的mac地址后,数据包才会继续被传递到网络层处理 ip地址匹配规则 图1: 参见:https://zhuanlan.zhihu.com/p/529160026?utm_id0 图2&am…...
安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
1.5.C++项目:仿muduo库实现并发服务器之socket模块的设计
项目完整版在: 一、socket模块:套接字模块 二、提供的功能 Socket模块是对套接字操作封装的一个模块,主要实现的socket的各项操作。 socket 模块:套接字的功能 创建套接字 绑定地址信息 开始监听 向服务器发起连接 获取新连接 …...
whisper+剪映+chatgpt实现实时语音对话功能
whisper将录音文件转成文字---chatgpt回答---剪映tts将文字转成语言。 GitHub - openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision whisper剪映chatgpt实现实时语音对话功能_哔哩哔哩_bilibili...
ASUS华硕ZenBook 13灵耀U 2代U3300F笔记本UX333FN/FA原装出厂Win10系统工厂安装模式
系统自带所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序 下载链接:https://pan.baidu.com/s/1dK0vMZMECPlT63Rb6-jeFg?pwdbym5 所需要工具:16G或以上的U盘(非必需) 文件格式:HDI,SWP,O…...
前端面试的话术集锦第 21 篇博文——高频考点(设计模式)
这是记录前端面试的话术集锦第二十一篇博文——高频考点(设计模式),我会不断更新该博文。❗❗❗ 设计模式总的来说是一个抽象的概念,前人通过无数次的实践总结出的一套写代码的方式,通过这种方式写的代码可以让别人更加容易阅读、维护以及复用。 这一章节我们将来学习几…...
php实战案例记录(2)生成包含字母和数字但不重复的用户名
在PHP中,您可以使用以下代码生成不重复的10个用户名,每个用户名包含英文字母和数字: $generatedUsernames array(); // 存储生成的用户名while (count($generatedUsernames) < 10) {$username generateUsername();if (!in_array($usern…...
分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测
分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测࿰…...
【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(其它指令)?
除了基础的 LDx 指令,还有 LDP、LDR 这些指令,我们也需要关注。 1 LDNP (SIMD&FP) 加载 SIMD&FP 寄存器对,带有非临时提示。该指令从内存加载一对 SIMD&FP 寄存器,向内存系统发出访问是非临时的提示。用于加载的地址是根据基址寄存器值和可选的立即偏移量计算…...
ElementPlus· tab切换/标签切换 + 分页
tab切换 ---> <el-tabs><el-tab-pane>... 分页 --------> <el-pagination> tab切换 // tab标签切换 // v-model双向绑定选项中的name,tab-change事件在 activeName改变时触发 <script setup> const tabChange (tab, event)>{…...
华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器)
华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器) #【有奖征文】华为云云服务器焕新上线,快来亲身感受评测吧!# ⭐️ CounterStrikeSource(CS起源是Valve的一款…...
腾讯云中使用ubuntu安装属于自己的overleaf
在自己的云服务器上安装overleaf的需求是从写论文开始的,总担心自己的论文放在一个网站上被泄露,所以想要在自己的服务器上安装自己的overleaf,正好手边有一个云服务器,现在开始。 配置腾讯云 因为使用overleaf的优势就是在不同…...
【redisson学习笔记】
1)clone项目 git clone https://github.com/redisson/redisson.git本来想直接用maven编译源码, 却发现各种错误,主要是maven的编译插件版本问题。 2)然后用maven包方式引入 <dependencies><dependency><groupId>org.redisson</gr…...
gurobi属性篇一
1.构造目标函数 (1)一般的写法: 我们常见的目标函数写法通常是定义好式子zf(x,y,...),然后用m.setObjective(z, GRB。MINIMIZE),这样的定义方式比较普遍。 这也是一般的写法。 (2)但还有一种写法…...
网站建设常见的问题/营销网页设计公司
安装步骤 进入到约定好固定的目录下 cd /opt 获取安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz 解压 tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz 创建启动用户 为什么要创建启动用户 Elasticsear…...
哪些做图形推理的网站/必应bing国内版
一、安装方法:rpm工具、yum工具、源码包 1、rpm工具:由redhat公司开发; yum工具:是由Python开发的;源码包:由C语言开发,C语言是Linux上最标准的程序语言。 二、rpm工具的使用1、在虚拟机上挂载一…...
如何给自家网站做关键词优化/mac日本官网入口
参考: 在WinForm项目中使用Windows Runtime的方法 c# 使用运行时库配置 修改csproj配置文件 在<TargetFramework>v4.5</TargetFramework>下面 添加 <targetPlatformVersion>10</targetPlatformVersion>添加引用windows.winmd 添加引用中…...
室内设计联盟模型下载/seo推广优化
近期,JetBrains发布了其旗舰产品IntelliJ IDEA的2018.2版本。新版本支持即将推出的Java 11、断点意图(Breakpoints Intentions)、MacBook的Touch Bar等特性,并改进了Spring Boot、Scala和Docker插件。\\Java\\IntelliJ IDEA 2018.…...
网站用微信登录 要怎么做/怎么制作网站链接
学习笔记 css position absolute relative 区别 相对定位 元素相对于他的起点进行移动,可以设置水平或垂直位置。 在使用相对定位时,无论是否进行移动,元素任然占据原来的空间。 <html><head><style>#div1 {width: 100px…...
阿里网站年费续费怎么做分录/百度广告一级代理
txt中数据格式如下:期号 红球 蓝球 开奖时间 开奖公告2012041 08 11 15 20 24 32 02 2012-04-10 开奖公告2012040 03 08 09 22 25 31 10 2012-04-08 开奖公告2012039 01 02 05 13 22 29 08 2012-04-05 开奖公告2012038 09 10 11 15 19 33 16 2012-04-03 开奖公告201…...