当前位置: 首页 > news >正文

cGANs with Projection Discriminator

基于映射鉴别器的CGAN

模型中,判别器(Discriminator)不是通过将条件信息简单地与特征向量拼接(concatenate)来使用条件信息,而是采用一种基于投影的方式,这种方式更加尊重条件信息在底层概率模型中的作用。
判别器的构建是受到概率模型假设的启发,其中条件变量 y 给定 x 的分布是离散的或单峰连续分布。这种模型假设在许多实际应用中很常见,包括类条件图像生成和超分辨率。通过这种假设,可以形成一个需要在嵌入的条件向量 y 和特征向量之间进行内积的判别器结构。
在这里插入图片描述

代码实现

class DiscriminatorPCGAN(nn.Module):def __init__(self, x_dim, c_dim, dim=96, norm='none', weight_norm='spectral_norm'):super(DiscriminatorPCGAN, self).__init__()norm_fn = _get_norm_fn_2d(norm)weight_norm_fn = _get_weight_norm_fn(weight_norm)def conv_norm_lrelu(in_dim, out_dim, kernel_size=3, stride=1, padding=1):return nn.Sequential(weight_norm_fn(nn.Conv2d(in_dim, out_dim, kernel_size, stride, padding)),norm_fn(out_dim),nn.LeakyReLU(0.2))self.ls = nn.Sequential(  # (N, x_dim, 32, 32)conv_norm_lrelu(x_dim, dim),conv_norm_lrelu(dim, dim),conv_norm_lrelu(dim, dim, stride=2),  # (N, dim , 16, 16)conv_norm_lrelu(dim, dim * 2),conv_norm_lrelu(dim * 2, dim * 2),conv_norm_lrelu(dim * 2, dim * 2, stride=2),  # (N, dim*2, 8, 8)conv_norm_lrelu(dim * 2, dim * 2, kernel_size=3, stride=1, padding=0),conv_norm_lrelu(dim * 2, dim * 2, kernel_size=1, stride=1, padding=0),conv_norm_lrelu(dim * 2, dim * 2, kernel_size=1, stride=1, padding=0),  # (N, dim*2, 6, 6)nn.AvgPool2d(kernel_size=6),  # (N, dim*2, 1, 1)torchlib.Reshape(-1, dim * 2),  # (N, dim*2))self.l_logit = weight_norm_fn(nn.Linear(dim * 2, 1))  # (N, 1)self.l_projection = weight_norm_fn(nn.Linear(dim * 2, c_dim))  # (N, c_dim)def forward(self, x, c):# x: (N, x_dim, 32, 32), c: (N, c_dim)feat = self.ls(x)logit = self.l_logit(feat)# 做一个线性编码embed = (self.l_projection(feat) * c).mean(1, keepdim=True)logit += embedreturn logit

CGAN参考文章

http://www.lryc.cn/news/451947.html

相关文章:

  • mysql学习教程,从入门到精通,SQL HAVING 子句(32)
  • JavaScript while循环语句
  • 49天精通Java(Day 2):Java的基本语法
  • uni-app之旅-day01-home页
  • Vue3轻松实现导出Excel文件功能
  • 在Kali Linux中使用VNC和iptables配置xrdp以实现远程连接
  • 小徐影院:Spring Boot技术下的影院革新
  • 命名空间
  • 使用 Elastic 将 AI 摘要添加到你的网站
  • dOOv:Java 数据验证与映射库(简化业务逻辑)
  • Arthas sc(查看JVM已加载的类信息 )
  • OCR 行驶证识别 离线识别
  • PHP泛目录生成源码,可生成长尾关键词页面,带使用方法视频教程
  • LeetCode题练习与总结:丑数--263
  • 初识C语言(五)
  • Linux:深入理解冯诺依曼结构与操作系统
  • 面试中顺序表常考的十大题目解析
  • 测试管理新增视图与高级搜索功能,测试计划支持一键生成缺陷详情,MeterSphere开源持续测试工具v3.3版本发布
  • TypeScript 算法手册 【归并排序】
  • 生信名词|MOA|基因敲低与基因敲除|DMSO|MODZ|生信基础
  • 基础岛第3关:浦语提示词工程实践
  • vscode中配置python虚拟环境
  • chatGPT对我学术写作的三种帮助
  • 【PostgreSQL 】入门篇——支持的各种数据类型介绍,包括整数、浮点数、字符串、日期、JSON、数组等
  • 野火STM32F103VET6指南者开发板入门笔记:【1】点亮RGB
  • 数据工程师岗位常见面试问题-3(附回答)
  • 强大的JVM监控工具
  • python 实现点的多项式算法
  • Pikachu-暴力破解-验证码绕过(on client)
  • 【Spring】Bean 的生命周期:从实例化到销毁