【人工智能笔记】第四十三节:TF2实现VITGAN对抗生成网络,ISN 实现

博客阅读:图解Transformer(The Illustrated Transformer) 博客阅读:图解Transformer(The Illustrated Transformer) 原文链接:https://jalammar.github.io/illustrated-transformer/ 作者:Jay Alammar 目录博客阅读:图解Transformer(The Illustrated Transformer)前言1.整体结构(A High-Level Look)图的引入(Bringing The Tensors Into the Picture)2.Encoder编码器(No 阅读详情

网络结构图
该章节介绍VITGAN对抗生成网络中,ISN 部分的代码实现。

目录(文章发布后会补上链接):

  1. 网络结构简介
  2. Mapping NetWork 实现
  3. PositionalEmbedding 实现
  4. MLP 实现
  5. MSA多头注意力 实现
  6. SLN自调制 实现
  7. CoordinatesPositionalEmbedding 实现
  8. ModulatedLinear 实现
  9. Siren 实现
  10. Generator生成器 实现
  11. PatchEmbedding 实现
  12. ISN 实现
  13. Discriminator鉴别器 实现
  14. VITGAN 实现

ISN 简介

论文原文
Improved Spectral Normalization. 为了进一步加强 Lipschitz 连续性,我们还在鉴别器训练中应用了谱归一化(SN)[35]。标准 SN 使用幂迭代来估计神经网络中每一层的投影矩阵的谱范数。然后将权重矩阵除以估计的谱范数,因此得到的投影矩阵的 Lipschitz 常数等于 1。我们发现 Transformer 块对 Lipschitz 常数的尺度很敏感,并且在使用 SN 时训练表现出非常缓慢的进展(c.f.表 3b)。同样,我们发现当使用基于 ViT 的鉴别器时,R1 梯度惩罚会削弱 GAN 训练(参见图 4)。 [14] 表明 MLP 块的小 Lipschitz 常数可能导致 Transformer 的输出崩溃为 rank-1 矩阵。为了解决这个问题,我们建议增加投影矩阵的光谱范数。

代码实现

import tensorflow as tf

class ISN(tf.keras.layers.Wrapper):
    """Performs spectral normalization on weights.
    This wrapper controls the Lipschitz constant of the layer by
    constraining its spectral norm, which can stabilize the training of GANs.
    See [Spectral Normalization for Generative Adversarial Networks](https://arxiv.org/abs/1802.05957).
    Wrap `tf.keras.layers.Conv2D`:
    >>> x = np.random.rand(1, 10, 10, 1)
    >>> conv2d = SpectralNormalization(tf.keras.layers.Conv2D(2, 2))
    >>> y = conv2d(x)
    >>> y.shape
    TensorShape([1, 9, 9, 2])
    Wrap `tf.keras.layers.Dense`:
    >>> x = np.random.rand(1, 10, 10, 1)
    >>> dense = SpectralNormalization(tf.keras.layers.Dense(10))
    >>> y = dense(x)
    >>> y.shape
    TensorShape([1, 10, 10, 10])
    Args:
        layer: A `tf.keras.layers.Layer` instance that
            has either `kernel` or `embeddings` attribute.
        power_iterations: `int`, the number of iterations during normalization.
    Raises:
        AssertionError: If not initialized with a `Layer` instance.
        ValueError: If initialized with negative `power_iterations`.
        AttributeError: If `layer` does not has `kernel` or `embeddings` attribute.
    """

    def __init__(self, layer: tf.keras.layers, power_iterations: int = 1, **kwargs):
        super().__init__(layer, **kwargs)
        if power_iterations <= 0:
            raise ValueError(
                "`power_iterations` should be greater than zero, got "
                "`power_iterations={}`".format(power_iterations)
            )
        self.power_iterations = power_iterations
        self._initialized = False

    def build(self, input_shape):
        """Build `Layer`"""
        super().build(input_shape)
        input_shape = tf.TensorShape(input_shape)
        self.input_spec = tf.keras.layers.InputSpec(shape=[None] + input_shape[1:])

        if hasattr(self.layer, "kernel"):
            self.w = self.layer.kernel
        elif hasattr(self.layer, "embeddings"):
            self.w = self.layer.embeddings
        else:
            raise AttributeError(
                "{} object has no attribute 'kernel' nor "
                "'embeddings'".format(type(self.layer).__name__)
            )

        self.w_shape = self.w.shape.as_list()

        self.u = self.add_weight(
            shape=(1, self.w_shape[-1]),
            initializer=tf.initializers.TruncatedNormal(stddev=0.02),
            trainable=False,
            name="sn_u",
            dtype=self.w.dtype,
        )

    def call(self, inputs, training=None):
        """Call `Layer`"""
        if training is None:
            training = tf.keras.backend.learning_phase()

        if training:
            self.normalize_weights()

        output = self.layer(inputs)
        return output
        
    def normalize_weights(self):
        """Generate spectral normalized weights.
        This method will update the value of `self.w` with the
        spectral normalized value, so that the layer is ready for `call()`.
        """

        w = tf.reshape(self.w, [-1, self.w_shape[-1]])
        u = self.u

        with tf.name_scope("spectral_normalize"):
            for _ in range(self.power_iterations):
                v = tf.math.l2_normalize(tf.matmul(u, w, transpose_b=True))
                u = tf.math.l2_normalize(tf.matmul(v, w))
            u = tf.stop_gradient(u)
            v = tf.stop_gradient(v)
            sigma = tf.matmul(tf.matmul(v, w), u, transpose_b=True)
            if not self._initialized:
                self.w_init_sigma = tf.constant(sigma)
                self._initialized = True
            self.u.assign(tf.cast(u, self.u.dtype))
            self.w.assign(
                tf.cast(tf.reshape(self.w_init_sigma * self.w / sigma, self.w_shape), self.w.dtype)
            )

if __name__ == "__main__":
    layer = ISN(tf.keras.layers.Dense(768, use_bias=False))
    x = tf.random.uniform([2,1,768], dtype=tf.float32)
    o1 = layer(x, training=True)
    tf.print('o1:', tf.shape(o1))
    o1 = layer(x, training=True)
    tf.print('o1:', tf.shape(o1))
    o1 = layer(x, training=False)
    tf.print('o1:', tf.shape(o1))

参考资料:

YOLOv5s模型训练全流程解析:从数据准备到实战检测 本文详细解析了YOLOv5s模型训练的全流程,涵盖从环境搭建、数据准备与格式转换,到模型训练、参数调优及实战检测的完整步骤。文章提供了具体的代码示例和常见问题解决方案,旨在帮助开发者,特别是新手,高效掌握YOLOv5s模型训练的核心技术,并成功应用于实际检测任务中。 阅读详情

相关推荐

安卓无障碍服务保活实战:如何用AccessibilityService实现后台常驻(附完整代码)

本文深入解析如何利用Android无障碍服务(AccessibilityService)实现后台服务保活,涵盖多版本系统适配、前台服务集成、开机自启机制等关键技术。通过详细的Kotlin代码示例和合规性指导,帮助开发者构建稳定可靠的后台服务解决方案,同时避免因滥用无障碍服务导致的应用下架风险。

milk5的博客 1073

第二十八周周报

第二十八周周报

童一的博客 388

Win11大版本更新失败:系统保留分区空间不足的终极解决方案

本文针对Windows 11大版本更新时遇到的“系统保留分区空间不足”错误,提供了详细的诊断与解决方案。核心问题在于EFI系统分区(ESP)空间过小,导致更新失败。文章重点介绍了使用傲梅分区助手等第三方工具安全扩展EFI分区的完整步骤,并提供了手动清理、使用安装介质修复等替代方案,帮助用户彻底解决更新障碍,顺利完成Win11升级。

weixin_29280219的博客 950

【人工智能笔记】第四十五节:TF2实现VITGAN对抗生成网络,VITGAN主体 实现

【人工智能笔记】第四十五节:TF2实现VITGAN对抗生成网络,VITGAN主体 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 701

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1305

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5995

ViTGAN:用视觉Transformer训练生成性对抗网络 Training GANs with Vision Transformers

不使用卷积或池化,能否使用视觉 Transformer 来完成图像生成任务?更具体而言:能否使用 ViT 来训练生成对抗网络(GAN)并使之达到与已被广泛研究过的基于 CNN 的 GAN 相媲美的质量?

白洞,白色的明天在等着我们 4781

GPU算力租用平台推荐

阿里云作为中国领先的云计算服务提供商,提供了丰富的GPU云服务器实例,包括NVIDIA Tesla V100、A100等多种高性能GPU型号。阿里云GPU云服务器适用于深度学习、科学计算、图形渲染等多种场景,能够满足不同用户的计算需求。

hong161688的博客 8173

第二十九周周报

第二十九周周报

童一的博客 286

802.11 NDP Sounding

NDP Sounding1.NDP原理2.NDP 过程3.帧结构3.1 NDPA结构3.2 CBF帧 1.NDP原理 802.11n标准提供的波束成形技术,可以通过预先补偿发射天线的相位,让两条波束进行叠加以实现最好的效果 显式波束成形需要终端反馈信道信息: AP向STA发送探测数据(NDP: null data packet sounding) STA向AP反馈信道信息(Compressed beamforming) AP根据STA的反馈或自行计算的权重信息进行波束成形 2.NDP 过程 802.

weixin_45799954的博客 8262

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f结构,实现精度与效率的同步提升

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

know_F0727的博客 201

【人工智能笔记】第三十五节:TF2实现VITGAN对抗生成网络,MLP 实现

【人工智能笔记】第三十五节:TF2实现VITGAN对抗生成网络,MLP 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 327

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【人工智能笔记】第四十节:TF2实现VITGAN对抗生成网络,Siren网络 实现

【人工智能笔记】第四十节:TF2实现VITGAN对抗生成网络,Siren网络 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 552

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

廖雪峰Python教程[完整版]

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

【人工智能笔记】第三十四节:TF2实现VITGAN对抗生成网络,PositionalEmbedding 实现

【人工智能笔记】第三十四节:TF2实现VITGAN对抗生成网络,PositionalEmbedding 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 504

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【人工智能笔记】第三十八节:TF2实现VITGAN对抗生成网络,CoordinatesPositionalEmbedding博里叶位置编码 实现

【人工智能笔记】第三十八节:TF2实现VITGAN对抗生成网络,CoordinatesPositionalEmbedding博里叶位置编码 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 605

【人工智能笔记】第四十二节:TF2实现VITGAN对抗生成网络,PatchEmbedding 实现

【人工智能笔记】第四十二节:TF2实现VITGAN对抗生成网络,PatchEmbedding 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 708

【人工智能笔记】第三十九节:TF2实现VITGAN对抗生成网络,ModulatedLinear调制模块 实现

【人工智能笔记】第三十九节:TF2实现VITGAN对抗生成网络,ModulatedLinear调制模块 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 332

【人工智能笔记】第三十七节:TF2实现VITGAN对抗生成网络,SLN自调制 实现

【人工智能笔记】第三十七节:TF2实现VITGAN对抗生成网络,SLN自调制 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 301

【人工智能笔记】第三十三节:TF2实现VITGAN对抗生成网络,Mapping NetWork 实现

该章节介绍VITGAN对抗生成网络中,Mapping NetWork 部分的代码实现。

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 776

【人工智能笔记】第三十六节:TF2实现VITGAN对抗生成网络,MSA多头注意力 实现

【人工智能笔记】第三十六节:TF2实现VITGAN对抗生成网络,MSA多头注意力 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 695

【人工智能笔记】第三十二节:TF2实现VITGAN对抗生成网络,网络结构简介

该系列一共分成N篇文章,对照论文实现每个细节,并附上源码,该系列完成最后会附上github地址。

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 762

【人工智能笔记】第四十四节:TF2实现VITGAN对抗生成网络,Discriminator鉴别器 实现

【人工智能笔记】第四十四节:TF2实现VITGAN对抗生成网络,Discriminator鉴别器 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 488

【人工智能笔记】第四十一节:TF2实现VITGAN对抗生成网络,Generator生成器 实现

【人工智能笔记】第四十一节:TF2实现VITGAN对抗生成网络,Generator生成器 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 384

谷歌新作ViTGAN:用视觉Transformer训练GAN!

本文转载自:新智元来源:arXiv 编辑:Priscilla LQ【导读】CNN地位不稳。加州大学圣地亚哥分校联合谷歌进行研究:用视觉Transformer训练GAN,结果表明,ViTG...

AI蜗牛车 2367

ViT代码解读

读懂VIT整体思路切块操作位置编码添加多头注意力机制插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 整体思路 Vision Transformer 是将Transformer应用在计算机视觉中。Transformer是一个基于注意力的模型,他不依靠卷积神经网络,相比RNN,他可以进行并行运

m0_53384927的博客 2940

谷歌ViTGAN | 视觉Transformer训练的GAN

点击上方“机器学习与生成对抗网络”,关注星标获取有趣、好玩的前沿干货!文章 新智元 来源:arXiv 编辑:Priscilla LQCNN地位不稳。加州大学圣地亚哥分校联合谷歌进行研究:...

idol24的博客 752
上一篇: 【人工智能笔记】第四十二节:TF2实现VITGAN对抗生成网络,PatchEmbedding 实现
下一篇: 【人工智能笔记】第三十四节:TF2实现VITGAN对抗生成网络,PositionalEmbedding 实现
PPHT-H
博客等级 码龄18年 6254粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPHT-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值