从一篇ICLR'2017被拒论文谈起:行走在GAN的Latent Space
同步自我的知乎专栏文章:https://zhuanlan.zhihu.com/p/32135185

- import numpy
- from matplotlib import pyplot
- def dist_o2l(p1, p2):
- # distance from origin to the line defined by (p1, p2)
- p12 = p2 - p1
- u12 = p12 / numpy.linalg.norm(p12)
- l_pp = numpy.dot(-p1, u12)
- pp = l_pp*u12 + p1
- return numpy.linalg.norm(pp)
- dim = 100
- N = 100000
- rvs = []
- dists2l = []
- for i in range(N):
- u = numpy.random.randn(dim)
- v = numpy.random.randn(dim)
- rvs.extend([u, v])
- dists2l.append(dist_o2l(u, v))
- dists = [numpy.linalg.norm(x) for x in rvs]
- print('Distances to samples, mean: {}, std: {}'.format(numpy.mean(dists), numpy.std(dists)))
- print('Distances to lines, mean: {}, std: {}'.format(numpy.mean(dists2l), numpy.std(dists2l)))
- fig, (ax0, ax1) = pyplot.subplots(ncols=2, figsize=(11, 5))
- ax0.hist(dists, 100, normed=1, color='g')
- ax1.hist(dists2l, 100, normed=1, color='b')
- pyplot.show()
结果如下:





















- from __future__ import print_function
- import argparse
- import os
- import numpy
- from scipy.stats import chi
- import torch.utils.data
- from torch.autograd import Variable
- from networks import NetG
- from PIL import Image
- parser = argparse.ArgumentParser()
- parser.add_argument('--nz', type=int, default=100, help='size of the latent z vector')
- parser.add_argument('--niter', type=int, default=10, help='how many paths')
- parser.add_argument('--n_steps', type=int, default=23, help='steps to walk')
- parser.add_argument('--ngf', type=int, default=64)
- parser.add_argument('--ngpu', type=int, default=1, help='number of GPUs to use')
- parser.add_argument('--netG', default='netG_epoch_49.pth', help="trained params for G")
- opt = parser.parse_args()
- output_dir = 'gcircle-walk'
- os.system('mkdir -p {}'.format(output_dir))
- print(opt)
- ngpu = int(opt.ngpu)
- nz = int(opt.nz)
- ngf = int(opt.ngf)
- nc = 3
- netG = NetG(ngf, nz, nc, ngpu)
- netG.load_state_dict(torch.load(opt.netG, map_location=lambda storage, loc: storage))
- netG.eval()
- print(netG)
- for j in range(opt.niter):
- # step 1
- r = chi.rvs(df=100)
- # step 2
- u = numpy.random.normal(0, 1, nz)
- w = numpy.random.normal(0, 1, nz)
- u /= numpy.linalg.norm(u)
- w /= numpy.linalg.norm(w)
- v = w - numpy.dot(u, w) * u
- v /= numpy.linalg.norm(v)
- ndimgs = []
- for i in range(opt.n_steps):
- t = float(i) / float(opt.n_steps)
- # step 3
- z = numpy.cos(t * 2 * numpy.pi) * u + numpy.sin(t * 2 * numpy.pi) * v
- z *= r
- noise_t = z.reshape((1, nz, 1, 1))
- noise_t = torch.FloatTensor(noise_t)
- noisev = Variable(noise_t)
- fake = netG(noisev)
- timg = fake[0]
- timg = timg.data
- timg.add_(1).div_(2)
- ndimg = timg.mul(255).clamp(0, 255).byte().permute(1, 2, 0).numpy()
- ndimgs.append(ndimg)
- print('exporting {} ...'.format(j))
- ndimg = numpy.hstack(ndimgs)
- im = Image.fromarray(ndimg)
- filename = os.sep.join([output_dir, 'gc-{:0>6d}.png'.format(j)])
- im.save(filename)
结果如下:








从一篇ICLR'2017被拒论文谈起:行走在GAN的Latent Space的更多相关文章
- (zhuan) 126 篇殿堂级深度学习论文分类整理 从入门到应用
126 篇殿堂级深度学习论文分类整理 从入门到应用 | 干货 雷锋网 作者: 三川 2017-03-02 18:40:00 查看源网址 阅读数:66 如果你有非常大的决心从事深度学习,又不想在这一行打 ...
- Steve Lin:如何撰写一篇优秀的SIGGRAPH论文
Lin:如何撰写一篇优秀的SIGGRAPH论文" title="Steve Lin:如何撰写一篇优秀的SIGGRAPH论文"> 英文原版 PPT下载:http:// ...
- 复现ICCV 2017经典论文—PyraNet
. 过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含“伪代码”.这是今年 AAAI 会议上一个严峻的 ...
- ACM TOMM 2017最佳论文:让AI接手繁杂专业的图文排版设计工作
编者按:你是否曾经为如何创作和编辑一篇图文并茂.排版精美的文章而烦恼?或是为缺乏艺术灵感和设计思路而痛苦?AI技术能否在艺术设计中帮助到我们?今天我们为大家介绍的这篇论文,“Automatic Gen ...
- 微软的一篇ctr预估的论文:Web-Scale Bayesian Click-Through Rate Prediction for Sponsored Search Advertising in Microsoft’s Bing Search Engine。
周末看了一下这篇论文,觉得挺难的,后来想想是ICML的论文,也就明白为什么了. 先简单记录下来,以后会继续添加内容. 主要参考了论文Web-Scale Bayesian Click-Through R ...
- Steve Lin:如何撰写一篇优秀的SIGGRAPH论文
英文原版 PPT下载:http://vdisk.weibo.com/s/z7VKRh2i3R4YO 一篇优秀的论文应该是这样的 广大的研究同仁介绍了这篇论文所包含的重要想法和所获得的结果 在论文中描 ...
- 国内首篇云厂商 Serverless 论文入选全球顶会:突发流量下,如何加速容器启动?
作者 | 王骜 来源 | Serverless 公众号 导读 USENIX ATC (USENIX Annual Technical Conference) 学术会议是计算机系统领域的顶级会议,入 ...
- 【深度学习 论文篇 01-1 】AlexNet论文翻译
前言:本文是我对照原论文逐字逐句翻译而来,英文水平有限,不影响阅读即可.翻译论文的确能很大程度加深我们对文章的理解,但太过耗时,不建议采用.我翻译的另一个目的就是想重拾英文,所以就硬着头皮啃了.本文只 ...
- MetaQNN : 与Google同场竞技,MIT提出基于Q-Learning的神经网络搜索 | ICLR 2017
论文提出MetaQNN,基于Q-Learning的神经网络架构搜索,将优化视觉缩小到单层上,相对于Google Brain的NAS方法着眼与整个网络进行优化,虽然准确率差了2-3%,但搜索过程要简单地 ...
随机推荐
- iOS开发中获取视图在屏幕上显示的位置
在iOS开发中,我们会经常遇到一个问题,例如,点击一个按钮,弹出一个遮罩层,上面显示一个弹框,弹框显示的位置在按钮附近.如果这个按钮的位置相对于屏幕边缘的距离是固定的,那就容易了,可以直接写死位置.可 ...
- flex词法解析
例子1.从标准输入的字数.单词.行数统计 %{ #include <string.h> int chars = 0; int lines = 0; int words = 0; %} %% ...
- bzoj1015星球大战
1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...
- 熟悉的“if __name__ == '__main__':”究竟是啥?
print(__name__) # 直接手动运行,打印"__main__",当做模块导入(别处import)时打印脚本名字即"name_main" if __n ...
- Linux下执行ls命令提示CMake Error错误
一.系统环境 Fedora10 二.出错情况 执行ls命令出现如下错误提示: CMake Error: The source directory "/etc/--color=auto&quo ...
- 关于svg
动画:css3动画,canvas(js动画),svg(html动画). svg基本元素 version: 表示 <svg> 的版本,目前只有 1.0,1.1 两种 xmlns:http:/ ...
- 一、Hadoop学习笔记————概述
hadoop使用java编写,版本较为混乱,初学者可从1.2.1开始学习
- Gulp livereload
平时使用yeoman作为前端部署工具,感觉到yeoman构建工具虽然方便,但是速度和大小总是不尽人意. 最近看到了gulp http://gulpjs.com/ 比较感兴趣随动手一试 gulp的安装以 ...
- ios2048小游戏
最近突然想写一个2048的小游戏,由于全部是自定义控件,所以程序看起来冗杂,但是核心的算法部分还是很不错的,大家感兴趣的可以仔细看看. 声明部分: #import <UIKit/UIKit.h& ...
- vue.js权威指南 PDF
链接:https://pan.baidu.com/s/1c2ItN6S 密码:ya8r