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

sGAN网络的基本实现(mnist数据集) sGAN 阅读详情

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

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

  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 实现

Discriminator鉴别器 简介

在这里插入图片描述
在这里插入图片描述
Discriminator鉴别器 参考的是ViT与BERT结构,加上三项修改。

代码实现

DiscriminatorEncoder 实现

import tensorflow as tf

import sys

sys.path.append('')

from models.msa import MSA
from models.mlp import MLP


class DiscriminatorEncoderLayer(tf.keras.layers.Layer):
    def __init__(self, d_model, num_heads, dropout=0.0, discriminator=True):
        super().__init__()
        self.d_model = d_model
        self.num_heads = num_heads
        self.dropout = dropout
        self.discriminator = discriminator
        self.ln1 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
        self.msa1 = MSA(d_model, num_heads, discriminator=discriminator)
        self.ln2 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
        self.mlp1 = MLP(d_model, discriminator=discriminator, dropout=dropout)

    def call(self, x, training):
        h = x
        x = self.ln1(x, training=training)
        x = self.msa1(v=x, k=x, q=x, mask=None)
        x = x + h
        h = x
        x = self.ln2(x, training=training)
        x = self.mlp1(x)
        x = x + h
        return x

class DiscriminatorEncoder(tf.keras.layers.Layer):
    def __init__(self, d_model, num_heads, num_layers, dropout=0.0, discriminator=True):
        super().__init__()
        self.d_model = d_model
        self.num_heads = num_heads
        self.num_layers = num_layers
        self.dropout = dropout
        self.discriminator = discriminator
        self.encoder_layers = [DiscriminatorEncoderLayer(d_model, num_heads, dropout=dropout, discriminator=discriminator) for i in range(num_layers)]

    def call(self, x, training):
        for encoder_layer in self.encoder_layers:
            x = encoder_layer(x=x, training=training)
        return x

if __name__ == "__main__":
    # layer = DiscriminatorEncoderLayer(256, 8)
    layer = DiscriminatorEncoder(256, 8, 4)
    x = tf.random.uniform([2,5,256], dtype=tf.float32)
    o1 = layer(x, training=True)
    tf.print('o1:', tf.shape(o1))

Discriminator鉴别器 实现

import tensorflow as tf
import sys


sys.path.append('')

from models.patch_embedding import PatchEmbedding
from models.discriminator_transformer_encoder import DiscriminatorEncoder
from models.mlp import MLP
from models.positional_embedding import PositionalEmbedding


class Discriminator(tf.keras.layers.Layer):
    """
    鉴别器
    """

    def __init__(
        self,
        image_size=224,
        patch_size=16,
        num_channels=3,
        overlapping=3,
        d_model=768,
        out_dim=1,
        dropout=0.0,
        discriminator=True,
    ):
        super().__init__()
        self.image_size = image_size
        self.patch_size = patch_size
        self.num_channels = num_channels
        self.overlapping = overlapping
        self.d_model = d_model
        self.out_dim = out_dim
        self.dropout = dropout
        self.discriminator = discriminator
        self.grid_size = image_size // patch_size
        self.num_patches = self.grid_size ** 2

        self.patch_embedding = PatchEmbedding(
            image_size=image_size,
            patch_size=patch_size,
            overlapping=overlapping,
            emb_dim=d_model,
            discriminator=discriminator,
        )
        # 输入位置编码
        self.patch_positional_embedding = PositionalEmbedding(
            sequence_length=self.num_patches+1,
            emb_dim=self.d_model,
        )
        self.discriminator_transformer_encoder = DiscriminatorEncoder(
            self.d_model,
            num_heads=8,
            num_layers=4,
            dropout=dropout,
            discriminator=discriminator,
        )
        self.mlp = MLP(out_dim, discriminator=discriminator, dropout=0.0)
        self.cls_token = tf.Variable(tf.random.uniform([1, 1, self.d_model], dtype=tf.float32), dtype=tf.float32)

    def call(self, x, training):
        batch_size = tf.shape(x)[0]
        x = self.patch_embedding(x)
        cls_token = tf.repeat(self.cls_token, repeats=batch_size, axis=0)
        x = tf.concat([cls_token, x], axis=1)
        x_pos = self.patch_positional_embedding()
        x += x_pos
        x = self.discriminator_transformer_encoder(x, training=training)
        x = self.mlp(x)
        x = x[:,0,:]
        # x = tf.math.sigmoid(x)
        return x


if __name__ == "__main__":
    layer = Discriminator(
        image_size=224,
        patch_size=16,
        num_channels=3,
        d_model=768
    )
    x = tf.random.uniform([2,224,224,3], dtype=tf.float32)
    o1 = layer(x, training=True)
    tf.print('o1:', tf.shape(o1))
    o1 = layer(x, training=False)
    tf.print('o1:', tf.shape(o1))

参考资料:

机器学习算法解析:判别器网络(Discriminator Network) 判别器网络是机器学习中非常重要的组件,它们用于解决各种监督学习问题,如图像分类、文本分类和声音识别。希望这篇博客帮助你理解判别器网络的基本概念和工作原理。如果你有任何问题或想进一步了解,请随时提出。愿你在机器学习的旅程中取得成功! 阅读详情

相关推荐

深入理解GAN网络

创造性地提出了对抗训练来代替人工指定的loss。之前的初步理解了一下,感觉还是不到位,在这里再稍微深入一点。

zcg1942的博客 1635

论文笔记:ViTGAN: Training GANs with Vision Transformers

ViT+GAN

qq_40206371的博客 1173

对抗神经网络(二)——DCGAN

一、DCGAN介绍 DCGAN即使用卷积网络的对抗网络,其原理和GAN一样,只是把CNN卷积技术用于GAN模式的网络里,G(生成器)网在生成数据时,使用反卷积的重构技术来重构原始图片。D(判别器)网用卷积技术来识别图片特征,进而做出判别。同时,CDGAN中的卷积神经网络也做了一些结构的改变,以提高样本的质量和收敛速度。 DCGAN的generator网络结构图如下: G网中使用ReLU作...

AI_girl的博客 1万+

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

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

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

【论文笔记】—生成对抗网络—GAN—2014-NIPS

题目:Generative Adversarial Nets生成对抗神经网络GAN开山之作论文。论文作者为“生成对抗网络之父”Ian Goodfellow和图灵奖得主Youshua Bengio。GAN近年来成为人工智能和深度学习的热门研究领域。GAN广泛应用于图像生成、风格迁移、AI艺术、黑白老照片上色修复。你可以使用GAN实现照片转成油画、野马转成斑马、黑夜转成白天,简笔画的猫转成真猫,模糊图像转成高清图像等酷炫好玩的应用。EID:arXiv:1406.2661.....................

chaiky的博客 4061

GAN 判别模型:判别器 (Discriminator) 原理与代码实例讲解

GAN, 判别器, 生成器, 对抗训练, 深度学习, 图像生成 1. 背景介绍 生成对抗网络 (Generative Adversarial Networks, GANs) 是一种近年来备受关注的深度学习模型,它由两个相互竞争的网络组成:生成器 (Generator) 和判别器 (D

AI大模型应用之禅 1060

深度学习李宏毅21春_14_GAN_P1

GAN_P1 Generation Network as Generator 接下来要进入一个,新的主题 我们要讲生成这件事情 到目前為止大家学到的network,都是一个function,你给他一个X就可以输出一个Y 我们已经学到各式各样的,network架构,可以处理不同的X 不同的Y 我们学到输入的X 如果是一张图片的时候怎麼办 如果是一个sequence的时候怎麼办 我们也学到输出的Y 可以是一个数值 可以是一个类别 也可以是一个sequence 接下来我们要进入一个新的主题,这个新的主题

weixin_55064529的博客 415

Transformer大模型实战 了解ELECTRA

Transformer大模型实战 了解ELECTRA 1.背景介绍 在自然语言处理(NLP)领域,Transformer模型自从2017年被提出以来,已经成为了主流的架构。Transformer模型的出现极大地提升了NLP任务的性能,尤其是在机器翻译、文本生成和问答系统等

AI天才研究院 541

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

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

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

大漠插件找图找字避坑手册:从ziku0.txt字库制作到易语言精准识别(附综合工具实操)

本文深入解析大漠插件在图像识别中的核心难点,提供从ziku0.txt字库精准制作到易语言高效调用的完整避坑指南。重点讲解如何利用大漠综合工具科学设置偏色与二值化参数,生成高质量色彩描述字符串,并分享识别失败的系统排查方法与进阶优化策略,旨在实现99%的稳定识别率。

weixin_29264201的博客 1208

从零构建Elasticsearch MCP代理:自然语言查询背后的技术揭秘

本文深入解析如何从零构建Elasticsearch MCP代理,实现自然语言查询的技术架构与实战应用。通过MCP协议与Elasticsearch的结合,系统能够将自然语言转换为精确的DSL查询,提升非技术用户的数据查询效率。文章详细介绍了核心架构、DSL生成引擎、端到端系统搭建及生产环境最佳实践,为开发者提供全面的技术指南。

lll78的博客 877

GAN对抗网络(代码详细解读)

从判别器D的角度 希望最大化 V(D,G)从生成器G的角度 希望最小化 V(D,G)GAN的应用领域1.图像生成生成一些假的数据 比如海报中的人脸2.图像增强从分割图生成假的真实街景 方便训练无人汽车3.风格化和艺术的图像创造转换图像风格 修补图像4.声音的转换一个人的声音转为另一个的声音 去除噪音等。

disciplining的博客 6520

利用Python暴力破解邻居家WiFi密码

如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀!

weixin_45841831的博客 6万+

HiDDeN Discriminator——基于深度学习的水印生成网络“鉴别器”详解

HiDDeN Discriminator——基于深度学习的水印生成网络“鉴别器”详解

girl_Xiaomin的博客 864

[ROS] rviz 可视化工具

[ROS] rviz 可视化工具 摄像头没讲 文章目录[ROS] rviz 可视化工具1. todo2. todo*. 参考*. 问题解决*. rough 1. todo 2. todo *. 参考 *. 问题解决 *. rough roscore + rviz

weixin_37834269的博客 2050

海量Embedding进行相似度查询和比较的方法

这个是在科研中的现实需求。例如每一个源代码文件,我们可以生成一个embedding,如果有超过5000万个embedding(例如用BERT生成5000万个embedding),怎么样有效地计算相似性呢(例如有5000个positive的embedding,想在5000万个中找到类似的)。 简单介绍一下我尝试的结果:如果直接用torch.cosine_similarity,我手里的数据估计至少要处理两个月。这时候就想到了用LSH -- Locality Sensitive Hashing,但是我之前并没怎

qysh123的专栏 4567

GAN(论文+Jittor框架实现代码)

gan.py import jittor as jt from jittor import init from jittor import nn from jittor.dataset.mnist import MNIST from jittor.dataset.dataset import ImageFolder import jittor.transform as transform import argparse import os import numpy as np from loguru i

qq_41048761的博客 1353

工业质检封神!YOLOv8实战金属表面缺陷检测,自建数据集mAP突破95%

本文详细介绍了基于YOLOv8的金属表面缺陷检测实战方案。针对工业质检中的光照不均、纹理复杂、小样本等挑战,作者构建了12000张图像的数据集,提出针对性数据增强策略和两阶段训练方法。通过优化损失函数、调整超参数等技术手段,最终在测试集上达到95.1%的mAP@0.5,检测速度32FPS。相比传统方法,该方案在精度和鲁棒性上均有显著提升,为工业视觉质检提供了可复现的落地解决方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 428

FusionGAN:VIIF

仅供自己参考

weixin_43690932的博客 989

KNN算法实现数据分类及matlab完整代码

其基本思想是:对于一个未知样本,找出与该样本距离最近的k个已知样本,然后根据这k个样本的类别来确定该未知样本的类别。在本文中,我们采用iris数据集,该数据集包含四个属性:花萼长度、花萼宽度、花瓣长度、花瓣宽度,以及三个类别:山鸢尾、变色鸢尾、维吉尼亚鸢尾。KNN算法具有简单、直观、易于理解等特点,适用于多分类和二分类问题,但其计算复杂度随着样本数量的增加而增加,也容易受异常值影响。在KNN算法中,常用的距离函数有欧氏距离、曼哈顿距离等。(2)选择距离最近的k个样本,并根据它们的类别来确定未知样本的类别。

qq_39605374的博客 1515

【DRAM存储器六十二】DDR5介绍--引脚和基本功能简介

详述DDR5与DDR4的引脚区别和DDR5基本功能

highman110的博客 523

生成对抗网络(GAN)

Generative Adversarial Network GAN的概述 GAN的思想就是:这是一个两人的零和博弈游戏,博弈双方的利益之和是一个常数,比如两个人掰手腕,假设总的空间是一定的,你的力气大一点,那你就得到的空间多一点,相应的我的空间就少一点,相反我力气大我就得到的多一点,但有一点是确定的就是,我两的总空间是一定的,这就是二人博弈,但是呢总利益是一定的。 用一个形象的例子解释就是:GAN就好比是一个大的网络,在这个网络中有两个小的网络,一个是生成网络,可以当做是制作假钞的人, 而另一个

weixin_36670529的博客 4538

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

半监督论文学习

半监督论文学习

Vae_fans的博客 1108

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

AI深度学习入门与实战10 生成式对抗网络:艺术创造也可以成为深度学习的拿手好戏

因为这一讲主要是概念和知识点的介绍,所以就没有对训练的过程展开。如果你感兴趣,可以在看完文章后自行补充训练过程的框架,即可得到一个属于自己的GAN 网络。但是如果你觉得自己暂时不能够完成补充,没有关系,在后续的 TensorFlow 介绍和实战中,我们将会学习如何构建一个训练流程,到时候你就知道了。那么,你还了解 GAN 的哪些应用呢?欢迎在留言区留言。下一讲,我将带你了解 Jupyter Notebook,它是深度学习编程常用的工具。

fegus的博客 1205

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

学习记录(三)生成对抗网络的初步认识

学习记录(三)

要多喝牛奶才能变成巨人 403

(十二)Mybatis鉴别器discriminator和延迟加载的用法

这篇文章主要讲述Mybatis鉴别器discriminator和延迟加载的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 这里写目录标题什么是鉴别器?代码示例总结 什么是鉴别器? mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为 代码示例 这里我们以一个一对一的联查来使用鉴别器和延迟加载来完成一些特定要求。 Employee类 此处省略get,set方法等。。 public class Employee { pri

怪咖@的博客 1023
上一篇: 【人工智能笔记】第三十六节:TF2实现VITGAN对抗生成网络,MSA多头注意力 实现
下一篇: 【人工智能笔记】第四十五节:TF2实现VITGAN对抗生成网络,VITGAN主体 实现
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、付费专栏及课程。

余额充值