ds证据理论python实现_ALI模型理论以及Python实现

https://openreview.net/forum?id=B1ElR4cgg

模型结构和明天要发BiGAN模型一模一样,但是两篇论文的作者都是独立完成自己的内容的。而且从写作的风格来看emmm完全不一样

ALI跟BiGAN的设计一模一样,但是就是没有加Latent regressor。虽然在ALI中也简要地谈到了这个Latent regressor。

并且根据ALI中的模型(G, E,D的架构)更容易实现,条理更加清晰,模型的结构设计实现也很容易。

ALI和BiGAN的对比

整体的设计上一模一样,这是共同点。并且两者都是独立设计的。

  1. ALI虽然提到Latent regressor但是,并没有使用。(只是说可以用来作为一个正则化,提高精度的额外的方法);BiGAN则放了较大的笔墨在这个regressor上。

  2. ALI结构更加清晰,并且各个模块的训练对应的损失也较大的很清晰;BiGAN虽然有在语言上大致描述为什么,但是描述的不够直观清晰,而且GAN训练本来就存在大量的坑,稍微'合理'修改某个小细节,就会导致训练不出结果。

  3. ALI对于E的解释上做得比较好(E可以理解为另外的一种G),这样看来都是来fool D的所以也是一种对抗,较为直观。并且ALI的数学分析部分和GAN承接的更加好,写得更加清晰。

b0a2954811b60d3c3dec7a0c41e998ea.png

计算方式,使用L2范数

两者虽然都谈到了Latent regressor,但是ALI更侧重笔墨于模型的结构的设计(但是画图不行)。BiGAN虽然更侧重于Latent regressor,但是结构画图相当不错。可以说是非常喜剧了。

给个对比:

32922ec45396e2d8933df2fc033e11b0.png

两个结构说的是一回事,当时看到真的笑死。

c5d40640ba5e9e66dc6b156510d2777d.png

虽然谈到了latent regressor,但是算法中并没有交代使用。

800a3a7ee9123b0e855c662c57263ff5.png

BiGAN虽然交代了使用,但是BiGAN没有给损失的具体写法,对于E的训练要自己设计。

可能是两者都或多或少有点问题,所以17年的ICLR就把两篇都录用了。

(或少:应该是ALI,或多多半是BiGAN)

后来就常用 ALI/BiGAN来表示这个模型。


恰饭


实验

实验相比于BiGAN没有使用latent regressor,但是效果居然也还行。

按照论文实验操作一样,第一行是G(E(x)),第二行是x。

x来源是真实数据。通过E学习到x的隐式特征z,输入给G,让G生成。

99553413a77536ef11e2d7f767cedeb5.png

1a00d70f4520cf43f3db8c21f1a44da9.png

edf7730360c69e5ec35bd78725636fc8.png

18060262250841c74d4318118840d72d.png

main.py

import osimport torchfrom torch.utils.data import Dataset, DataLoaderimport torch.nn as nnfrom model import Generator, Discriminator, Encoderimport torchvisionimport itertoolsimport matplotlib.pyplot as pltimport torchvision.utils as vutilsimport numpy as npif __name__ == '__main__':    LR = 0.0002    EPOCH = 100  # 50    BATCH_SIZE = 100    N_IDEAS = 128    lam = 1    DOWNLOAD_MNIST = False    TRAINED = False    mnist_root = '../Conditional-GAN/mnist/'    if not (os.path.exists(mnist_root)) or not os.listdir(mnist_root):        # not mnist dir or mnist is empyt dir        DOWNLOAD_MNIST = True    train_data = torchvision.datasets.MNIST(        root=mnist_root,        train=True,  # this is training data        transform=torchvision.transforms.ToTensor(),  # Converts a PIL.Image or numpy.ndarray to        # torch.FloatTensor of shape (C x H x W) and normalize in the range [0.0, 1.0]        download=DOWNLOAD_MNIST,    )    train_loader = DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)    torch.cuda.empty_cache()    if TRAINED:        G = torch.load('G.pkl').cuda()        D = torch.load('D.pkl').cuda()        E = torch.load('E.pkl').cuda()    else:        G = Generator(N_IDEAS).cuda()        D = Discriminator().cuda()        E = Encoder(input_size=1, out_size=N_IDEAS).cuda()    optimizerG_E = torch.optim.Adam(itertools.chain(G.parameters(), E.parameters()), lr=LR)    optimizerD = torch.optim.Adam(D.parameters(), lr=LR)    l_c = nn.MSELoss()    for epoch in range(EPOCH):        tmpD, tmpG_E, tmpE = 0, 0, 0        for step, (x, y) in enumerate(train_loader):            # x            x = x.cuda()            z = torch.randn((x.shape[0], N_IDEAS, 1, 1)).cuda()            # z, G, D            G_z = G(z)            D_G_z = torch.mean(D(G_z, z))  # fake            # x, E, D            E_x = E(x)            D_E_x = torch.mean(D(x, E_x))  # real            D_loss = -torch.mean(torch.log(D_E_x) + torch.log(1 - D_G_z))            Latent_regress = l_c(z, E(G_z))            G_E_loss = -torch.mean(torch.log(1 - D_E_x) + torch.log(D_G_z))  # + lam * Latent_regress            optimizerD.zero_grad()            D_loss.backward(retain_graph=True)            optimizerD.step()            optimizerG_E.zero_grad()            G_E_loss.backward(retain_graph=True)            optimizerG_E.step()            tmpD_ = D_loss.cpu().detach().data            tmpG_E_ = G_E_loss.cpu().detach().data            tmpE_ = Latent_regress.cpu().detach().data            tmpD += tmpD_            tmpG_E += tmpG_E_            tmpE += tmpE_        tmpD /= (step + 1)        tmpG_E /= (step + 1)        tmpE /= (step + 1)        print(            'epoch %d avg of loss: D: %.6f, G_E: %.6f, latent: %.6f' % (epoch, tmpD, tmpG_E, tmpE)        )        if epoch % 2 == 0:            # x = x.cuda()            G_imgs = G(E(x)).cpu().detach()            fig = plt.figure(figsize=(10, 10))            plt.axis("off")            plt.imshow(                np.transpose(vutils.make_grid(torch.cat([G_imgs, x.cpu().detach()]), nrow=10, padding=0, normalize=True,                                              scale_each=True), (1, 2, 0)))            plt.savefig('E_%d_.png' % step)            plt.show()    torch.save(G, 'G.pkl')    torch.save(D, 'D.pkl')    torch.save(E, 'E.pkl')

model.py

import osimport torchimport torch.nn as nnimport torch.utils.data as Dataimport torchvisionfrom torch.utils.data import DataLoaderclass Generator(nn.Module):    def __init__(self, input_size):        super(Generator, self).__init__()        strides = [1, 2, 2, 2]        padding = [0, 1, 1, 1]        channels = [input_size,                    256, 128, 64, 32]  # 1表示一维        kernels = [4, 3, 4, 4]        model = []        for i, stride in enumerate(strides):            model.append(                nn.ConvTranspose2d(                    in_channels=channels[i],                    out_channels=channels[i + 1],                    stride=stride,                    kernel_size=kernels[i],                    padding=padding[i]                )            )            model.append(                nn.BatchNorm2d(channels[i + 1])            )            model.append(                nn.LeakyReLU(.1)            )        self.Conv_T = nn.Sequential(*model)        self.Conv = nn.Sequential(            nn.Conv2d(kernel_size=1, stride=1, in_channels=channels[-1], out_channels=channels[-1]),            nn.BatchNorm2d(channels[-1]),            nn.LeakyReLU(.1),            nn.Conv2d(kernel_size=1, stride=1, in_channels=channels[-1], out_channels=1),            nn.Sigmoid()        )    def forward(self, x):        x = self.Conv_T(x)        x = self.Conv(x)        return xclass Encoder(nn.Module):    def __init__(self, input_size=1, out_size=128):        super(Encoder, self).__init__()        strides = [2, 2, 2, 1, 1, 1]        padding = [1, 1, 1, 0, 0, 0]        channels = [input_size, 32, 64, 128, 256, out_size, out_size]  # 1表示一维        kernels = [4, 4, 4, 3, 1, 1]        model = []        for i, stride in enumerate(strides):            model.append(                nn.Conv2d(                    in_channels=channels[i],                    out_channels=channels[i + 1],                    stride=stride,                    kernel_size=kernels[i],                    padding=padding[i]                )            )            if i != len(strides) - 1:                model.append(                    nn.BatchNorm2d(channels[i + 1])                )                model.append(                    nn.ReLU()                )        self.main = nn.Sequential(*model)    def forward(self, x):        x = self.main(x)        return xclass Discriminator(nn.Module):    def __init__(self, x_in=1, z_in=128):        super(Discriminator, self).__init__()        self.D_x = nn.Sequential(            nn.Conv2d(in_channels=x_in, out_channels=32, kernel_size=4, stride=2),            nn.Dropout2d(.2),            nn.LeakyReLU(.1),            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=4, stride=2),            nn.BatchNorm2d(64),            nn.Dropout2d(.2),            nn.LeakyReLU(.1),            nn.Conv2d(in_channels=64, out_channels=128, kernel_size=4, stride=2),            nn.BatchNorm2d(128),            nn.Dropout2d(.2),            nn.LeakyReLU(.1),        )        self.D_z = nn.Sequential(            nn.Conv2d(in_channels=z_in, out_channels=256, kernel_size=1, stride=1),            nn.Dropout2d(.2),            nn.LeakyReLU(.1),            nn.Conv2d(in_channels=256, out_channels=256, kernel_size=1, stride=1),            nn.Dropout2d(.2),            nn.LeakyReLU(.1),        )        self.D_x_z = nn.Sequential(            nn.Conv2d(in_channels=256 + 128, out_channels=512, kernel_size=1, stride=1),            nn.Dropout2d(.2),            nn.LeakyReLU(.1),            nn.Conv2d(in_channels=512, out_channels=512, kernel_size=1, stride=1),            nn.Dropout2d(.2),            nn.LeakyReLU(.1),            nn.Conv2d(in_channels=512, out_channels=1, kernel_size=1, stride=1),            nn.Dropout2d(.2),            nn.Sigmoid(),        )    def forward(self, x, z):        x = self.D_x(x)        z = self.D_z(z)        cat_x_z = torch.cat([x, z], dim=1)        return self.D_x_z(cat_x_z)if __name__ == '__main__':    N_IDEAS = 128    G = Generator(N_IDEAS, )    rand_noise = torch.randn((10, N_IDEAS, 1, 1))    print(G(rand_noise).shape)    E = Encoder(input_size=1, out_size=N_IDEAS)    print(E(G(rand_noise)).shape)    D = Discriminator()    print(D(G(rand_noise), rand_noise).shape)

judge.py

import numpy as npimport torchimport matplotlib.pyplot as pltfrom model import Generator, Discriminatorimport torchvision.utils as vutilsimport osimport torchvisionfrom torch.utils.data import Dataset, DataLoaderif __name__ == '__main__':    BATCH_SIZE = 100    N_IDEAS = 12    TIME = 10    G = torch.load("G.pkl").cuda()    mnist_root = '../Conditional-GAN/mnist/'    DOWNLOAD_MNIST = False    if not (os.path.exists(mnist_root)) or not os.listdir(mnist_root):        # not mnist dir or mnist is empyt dir        DOWNLOAD_MNIST = True    train_data = torchvision.datasets.MNIST(        root=mnist_root,        train=True,  # this is training data        transform=torchvision.transforms.ToTensor(),  # Converts a PIL.Image or numpy.ndarray to        # torch.FloatTensor of shape (C x H x W) and normalize in the range [0.0, 1.0]        download=DOWNLOAD_MNIST,    )    train_loader = DataLoader(dataset=train_data, batch_size=10, shuffle=True)    E = torch.load('E.pkl')    for t in range(TIME):        tmp = []        for step, (x, y) in enumerate(train_loader):            # x            x = x.cuda()            G_imgs = G(E(x)).cpu().detach()            tmp.append(torch.cat([G_imgs, x.cpu().detach()]))            if step == 5:                break        fig = plt.figure(figsize=(10, 10))        plt.axis("off")        plt.imshow(            np.transpose(vutils.make_grid(torch.cat(tmp), nrow=10, padding=0, normalize=True,                                          scale_each=True), (1, 2, 0)))        plt.savefig('E_%d.png' % t)        plt.show()

882427abd25326e081a98344d54a7cbd.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IO操作总结

1,读取文件将文件转换为二进制流 1 InputStream in new FileInputStream("C:/test.png"); 2 byte[] photo new byte[in.available()]; 3 in.read(photo); 4 in.close(); View Code2,写文件 1 Outpu…

计算机网络基础:网络标准相关知识介绍

1、常见的制定网络标准的机构 国际标准化组织、国际电信联盟、电子工业协会、电气和电子工程协会、因特网活动委员会 2、常见的网络标准 2.1 电信标准 国际电信联盟(ITU)1947年成为联合国的一个组织,包括ITU-R、ITU-T、ITU-D组成。 ITU-R:无线…

1-5Tomcat 目录结构 和 web项目目录结构

对应我的安装路径: web项目目录结构 转载于:https://www.cnblogs.com/huiziz/p/5671612.html

execjs执行js出现window对象未定义时的解决_10个常见的JS语言错误总汇

1、 Uncaught TypeError: Cannot Read Property这是 JavaScript 开发人员最常遇到的错误。当你读取一个属性或调用一个未定义对象的方法时,Chrome 中就会报出这样的错误。导致这个错误发生的原因有很多,常见的一种情况是在渲染 UI 组件时,不正…

安卓logcat工具apk_backdoorapk 安卓APK后门捆绑脚本

项目地址https://github.com/dana-at-cp/backdoor-apk项目介绍backdoor-apk是一个bash写的脚本,通过msfvenom生成一个android的payload,然后再使用apktools将payload捆绑到正常的apk文件中。使用方法rootkali:~/Android/evol-lab/BaiduBrowserRat# ./bac…

java8 supplier 接口

Supplier 接口 Supplier 接口是一个供给型的接口,其实,说白了就是一个容器,可以用来存储数据,然后可以供其他方法使用的这么一个接口 *** Supplier接口测试,supplier相当一个容器或者变量,可以存储值*/Tes…

mantis apache mysql_软件测试(软件安装:php+mysql+apache+mantis过程遇到的问题以及解决方法)...

实验环境: Windows 7 64位操作系统浏览器版本: Mozilla Firefox 41.0.0.5378一.PHP的安装① 版本: php-5.4.45-Win32-VC9-x86安装步骤:安装将PHP安装到 D:\PHP下(目录可以自行更改)配置找到PHP目录里的类似 php.ini-dist ,…

html登录界面_使用数据库制作一套注册登录系统

经过了那么多个星期的学习&#xff0c;终于到了使用数据库的阶段了&#xff0c;最基本的也就是制作注册登录与数据库连接。首先要制作一个注册窗口先是html界面<效果如图&#xff1a;&#xff08;样子怎么样不重要&#xff0c;重要的是测试&#xff09;这主要是将form数值发…

java8中Predicate用法

Predicate是个断言式接口其参数是<T,boolean>&#xff0c;也就是给一个参数T&#xff0c;返回boolean类型的结果。跟Function一样&#xff0c;Predicate的具体实现也是根据传入的lambda表达式来决定的。 Testpublic void predicate(){/*** Predicate谓词测试&#xff0c…

计算机网络基础:局域网协议相关知识

1、局域网协议的概念 局域网络中的通信被限制在中等规模的地理范围内&#xff0c;比如一所学校&#xff1b;能够使用具体中等或较高数据速率的物理信道&#xff0c;并且具有较低的误码率&#xff1b;局域网络是专用的&#xff0c; 由单一组织机构所使用。 局域网特点&#xff1…

mysql数据库交叉连接_【数据库】内连接、外连接、交叉连接

基本概念关系模型(表)关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。关系模型的数据结构非常简单&#xff1a;一张扁平的二维表。元组&#xff1a;二维表中的具有相同数据类型的某一行属性&#xff1a;二维表中的具有相同数据类型的某一列笛卡尔积(Cartesi…

网络资产管理系统_固定资产管理系统的三种网络架构方式

随着互联网技术的发展和信息技术的广泛使用&#xff0c;固定资产管理系统在各行业的应用越来越普及&#xff0c;固定资产管理系统作为当今主流的企业固定资产信息化管理模式&#xff0c;能够对企业固定资产进行有效管理并提升企业的管理水平。对于固定资产管理系统的网络结构方…

计算机网络基础:广域网协议相关知识笔记

广域网常指覆盖范围广、数据传输速率较低&#xff0c;以数据通信为目的的数据通信网。广域网主要是通过专用的或交换式的连接把计算机连接起来。广域网传输协议主要包括&#xff1a;PPP&#xff08;点对点协议&#xff09;、DDN、ISDN&#xff08;综合业务数字网&#xff09;、…

计算机网络基础:TCP/IP协议相关知识笔记​

1、TCP/IP特性逻辑编址&#xff1a;每一块网卡会在出厂时由厂家分配了唯一的永久性物理地址。针对Internet&#xff0c;会为每台连入因特网的计算机分配一个逻辑地址也就是IP地址。路由选择&#xff1a;专门用于定义路由器如何选择网络路径的协议&#xff0c;即IP数据包的路由选…

终于做出来了

1 <!doctype html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>精英大赛2号 </title>6 <meta name"Keywords" content"关键字">7 <meta name"Desp…

ashx连接mysql_ASP.net与SQLite数据库通过js和ashx交互(连接和操作)

ASP.net与SQLite数据库通过js和ashx交互(连接和操作)&#xff1a;废话(也是思路)&#xff1a;用的是VS2010&#xff0c;打算做网站前后台。由于不喜欢前台语言里加些与html和css和js的其他内容&#xff0c;想实现前后台语言的分离&#xff0c;与前后台通过js的ajax实现交互&…

计算机网络:九大命令!解决网络故障新思路

一&#xff1a;ping命令ping是个使用频率极高的实用程序&#xff0c;主要用于确定网络的连通性。这对确定网络是否正确连接&#xff0c;以及网络连接的状况十分有用。简单的说&#xff0c;ping就是一个测试程序&#xff0c;如果ping运行正确&#xff0c;大体上就可以排除网络访…

webpack打包后引用cdn的js_JS逆向:Webpack打包后的代码怎么搞?猿人学爬虫比赛第十六题详细题解...

实战地址http://match.yuanrenxue.com/match/16抓包分析地址栏输入 地址&#xff0c;按下F12并回车&#xff0c;发现数据在这里:查看cookie&#xff0c;无加密相关的字段。请求的接口倒是有个m的加密参数&#xff0c;看来这题的主要目的就是 看看m参数怎么进行加密的吧。切换 I…

计算机网络基础:IP基础知识笔记

1、 IP地址概念IP是用来唯一标识主机地址。IP地址 网络地址 主机地址(又称&#xff1a;主机号和网络号组成)例如IP&#xff1a;192.168.100.168 子网掩码 255.255.255.0 对应的网络地址和主机地址如下&#xff1a;192.168.100.168&#xff08;IP地址&#xff09; 192.168.1.…