论文:生成模型采样-类比学习应用 代码

之前发的这篇文章(之前内容在文章底部)介绍了生成模型的高效采样及隐变量空间特征特点,最近的How to Train a GAN? Tips and tricks to make GANs work GANhack又提及了GAN采样使用此论文的采样方法更高效,而且官方的代码开源(代码比较复杂,而且我跑了出错)https://github.com/dribnet/plat 错误已发issue。但代码还是有参考价值。

官方提供的代码效果:

Quickstart

Install this library, code supporting a model type, and go.

$ pip install plat
$ pip install git+https://github.com/dribnet/discgen.git \
  -r https://raw.githubusercontent.com/dribnet/discgen/master/requirements.txt
$ plat sample --model celeba_64.discgen
Model celeba_64.discgen will be downloaded. Continue? [Y/n] y
Saving image file plat_20161006_celeba_64_discgen_01.png

Sampling Examples

By default, plat does a random sampling. The output file will be automatically generated, or can be given explicitly. To make the results repeatable, you can also specify a random seed.

$ plat sample \
  --model celeba_64.discgen \
  --seed 1 \
  --outfile examples/random_sample.jpg

The number of rows and columns can be specified. Interpolation is done by specifying the spacing between samples.

$ plat sample \
  --model celeba_64.discgen \
  --seed 1 \
  --rows 1 --cols 7 \
  --spacing 6 \
  --outfile examples/random_interpolation.jpg

Interpolation can be done across multiple points in two dimensions to create a mine grid (details in paper).

$ plat sample \
  --model celeba_64.discgen \
  --seed 1 \
  --rows 3 --cols 7 \
  --spacing 3 \
  --outfile examples/random_mine_grid.jpg

There are many more options to explore. When experimenting, it can be useful to use a templated output filename.

$ plat sample \
  --model celeba_64.discgen \
  --seed 17 \
  --tight \
  --rows 3 --cols 7 \
  --spacing 2 \
  --outfile examples/%DATE%_experiment_s%SEED%_%SEQ%.jpg

Model types

plat comes with access to a growing list of models and model types in its model zoo. Each model type will have separate dependencies.

It's also possible to run plat on new types of models by providing a simple plat interface. There are a few examplesand a template to get started. Here's an example of how to use plat sample with a manually specified model interface to generate a (random) mine grid from an iGAN model:

PYTHONPATH=. plat sample \
  --model-interface plat.interface.igan.IganModel \
  --model-file models/shoes_64.dcgan_theano \
  --uniform \
  --rows 4 --cols 10 \
  --tight --spacing 3 \
  --image-size 64 \
  --seed 1

代码比较复杂:参数就非常多:

...........................

调用:

plat.sampling.grid_from_latents(z, dmodel, args.rows, args.cols, anchor_images, args.tight, args.shoulders, cur_save_path, cur_basename, args, args.batch_size)

def grid_from_latents(z, dmodel, rows, cols, anchor_images, tight, shoulders, save_path, basename="basename", args=None, batch_size=24):

........

decoded = dmodel.sample_at(cur_z)

采样z的遍历方式计算如下:

具体采样计算:

decoded = dmodel.sample_at(cur_z) 采样操作还依赖另外的模型生成程序:

ref https://github.com/dribnet/discgen 模型也是这个代码及论文介绍生成的。

通过theano实现。

整个代码稍微复杂一些,需要的可以参考一下。

计算机能否学会类比?我的答案是能,不但能,而且有人已经展示了相关效果:

Sampling Generative Networks: Notes on a Few Effective Techniques

今天看的这篇论文题目如上,生成模型能学习到相关语义特征,且这种语义特征可以进行计算和推理。

下面进行论文解读:

生成模型是一种流行的方法来无监督机器学习。生成的神经网络模型进行培训,以产生类似的训练集的数据样本。由于模型参数的数量是显着小于训练数据,模型被迫发现有效的数据表示。这些模型是从一组在高维空间中的潜变量的采样,这里被称为一个潜在的空间。潜在的空间可以被采样,以产生可观察到的数据值。学习的潜表示经常也允许与向量空间算术的语义运算。

这些潜在的空间通常是高度结构化和可使生成的图像的潜在空间简单向量距离算法复杂的操作,比如:

论文首先将传统线性采样修改为球形弧线采样,提高了中间图片的连续性:如下图:

第二:论文介绍了类比学习推理的相关方法和生成模型在此中的应用

生成模型学习到了更加结构化的内部表示,可以方便的应用到类比推理中,比如下图:

the encoder and decoder of the model. The bottom right image shows the result of applying the analogy operation (B + C) – A. All other images are interpolations using the slerp operator. (model: VAE from Lamb 16 on CelebA)

第三论文介绍了不同图片直接的过度状态浏览,如下面大图直接的过度图片生成查看

第四论文提出了属性向量,比如笑脸向量,可以加到普通脸面图片上。

第五论文进行了标签隐含关联的分析,指出生成模型学到的相关向量的关联性反应了事物之间的规律,比如女人普遍比男人爱笑,模糊的图片普遍较暗,人们发笑时普遍会张嘴露牙

通过属性分解,即可分析单独人脸属性的潜在关联。

原文发布于微信公众号 - CreateAMind(createamind)

原文发表时间:2016-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习那些事儿

我的模型能跑多快——神经网络模型速度调研(一)

对于神经网络,我们更多谈的是其精度怎么样,有百分之零点几的提升。但是如果谈到速度的话,深度学习神经网络相比于传统的算法来说,速度恐怕没有那么快了。

3891
来自专栏PPV课数据科学社区

学习SVM,这篇文章就够了!

支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问...

4554
来自专栏机器学习算法与Python学习

SVM大解密(附代码和公式)

1875
来自专栏集智的专栏

使用腾讯云 GPU 学习深度学习系列之三:搭建深度神经网络

本文进一步详细介绍了 Tensorflow 中 Keras 工具包提供的几种深度神经网络模块,包括其功能以及用途。

8.7K3
来自专栏AI科技大本营的专栏

SVM大解密(附代码和公式)

写在之前 支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现...

1.1K9
来自专栏数据派THU

一文读懂支持向量机SVM(附实现代码、公式)

支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问...

5303
来自专栏机器之心

教程 | 百行代码构建神经网络黑白图片自动上色系统

4036
来自专栏大数据挖掘DT机器学习

R语言实现 支持向量机

一、SVM的想法 回到我们最开始讨论的KNN算法,它占用的内存十分的大,而且需要的运算量也非常大。那么我们有没有可能找到几个最有代表性的点(即保...

3103
来自专栏人工智能头条

SVM大解密(附代码和公式)

2322
来自专栏Coding迪斯尼

手算梯度下降法,详解神经网络迭代训练过程

1724

扫码关注云+社区