9745?1475547574

车慧敏 (Student)

chehuimin

国防科学技术大学

Ta在确实 over 3 years

  • 湖南-长沙
  • 2015-10-26开始使用
  • 10450次访问(自2016年5月)
Ta的动态
9745?1475547574
发布时间:01/18/2018 11:27
更新时间:01/18/2018 11:28

1.What’s the least common category in the training data?

groupby_label = image_train.groupby(key_columns='label',
                                    operations={'total_count':graphlab.aggregate.COUNT()}) 
groupby_label.sort('total_count', ascending=True) 


2.Of the images below, which is the nearest ‘cat’ labeled image in the training data to the the first image in the test data (image_test[0:1])?

image_test[0:1]['image'].show()
image_train_cat = image_train.filter_by(['cat'],'label')
knn_model_cat = graphlab.nearest_neighbors.create(image_train_cat,features=['deep_features'], label='id')
cat_neighbors = get_images_from_ids(knn_model_cat.query(image_test[0:1],k=1))
cat_neighbors['image'].show()

3.Of the images below, which is the nearest ‘dog’ labeled image in the training data to the the first image in the test data (image_test[0:1])?

image_test[0:1]['image'].show()
image_train_dog = image_train.filter_by(['dog'],'label')
knn_model_dog = graphlab.nearest_neighbors.create(image_train_dog,features=['deep_features'], label='id')
dog_neighbors = get_images_from_ids(knn_model_dog.query(image_test[0:1],k=1))
dog_neighbors['image'].show()

4.For the first image in the test data, in what range is the mean distance between this image and its 5 nearest neighbors that were labeled ‘cat’ in the training data?

knn_model_cat.query(image_test[0:1],k=5)['distance'].mean()

5.For the first image in the test data, in what range is the mean distance between this image and its 5 nearest neighbors that were labeled ‘dog’ in the training data?

knn_model_dog.query(image_test[0:1],k=5)['distance'].mean()

6.On average, is the first image in the test data closer to its 5 nearest neighbors in the ‘cat’ data or in the ‘dog’ data?

  • cat

7.In what range is the accuracy of the 1-nearest neighbor classifier at classifying ‘dog’ images from the test set?

knn_classifier_model_dog = graphlab.nearest_neighbor_classifier.create(image_train, 
                                                                       features=['deep_features'], 
                                                                       target='label' )
image_test_dog = image_test.filter_by(['dog'],'label')
knn_classifier_model_dog.evaluate(image_test_dog,max_neighbors=1)
回复 ︿
9745?1475547574
发布时间:01/18/2018 11:21
更新时间:01/18/2018 11:21

回复 ︿
9745?1475547574
发布时间:10/02/2016 10:20
更新时间:03/07/2017 12:01

增强学习:

    非联想增强学习:仅从环境获得回报,而不区分环境的状态

    联想增强学习:获得回报的同时,具有环境的状态信息的反馈(大多有延时回报的效果)[1]


云机器人的形式的集中式多机器人,其增强学习的方式可以做如下描述:

    由一个中央学习期负责学习,其他机器人不是学习的主体,仅将感知的环境信息提交给中央学习器,并接受和执行动作命令。这种方式随着系统规模的增加,将面临学习空间的规模爆炸的问题,且对于通信的依赖程度非常高。


1994年第一次提出了将多机器人与增强学习联系在一起[2]。这么做的优点是:无需建立精确地环境模型,简化了智能体的编程,无须构建环境地图,可以把路径规划,避碰,臂章,协作等问题统一解决。
Deep Reinforcement Learning深度增强学习始于2013年DeepMind的Playing Atari with Deep Reinforcement Learning一文[3]
2015年同一批人在Nature上发表了Human Level Control through Deep Reinforcement Learning[4]一文使Deep Reinforcement Learning得到了较广泛的关注

典型的多机器人增强学习的应用有:
1. 基于再励学习的多移动机器人协调避障路径规划方法
2. 多机器人动态编队的强化学习算法研究
3. 基于强化学习的多机器人路径规划方法
4. 多机器人足球
5. 多目标观测
6. 追逃
7. 协调搬运
8. 搜索与覆盖


批增强学习[5]:将智能体在环境中经历的一系列经验记录下来,再使用经验进行反复训练。RoboCup的Keepway用的就是这种。


Q-learning 算法的一个简单的示例: http://blog.csdn.net/itplus/article/details/9361915


[1]面向多机器人系统的增强学习研究进展综述

[2]Mataric, Maja J. Interaction and Intelligent Behavior. No. AI-TR-1495. MASSACHUSETTS INST OF TECH CAMBRIDGE ARTIFICIAL INTELLIGENCE LAB, 1994.

[3] Mnih V, Kavukcuoglu K, Silver D, et al. Playing Atari with Deep Reinforcement Learning[J]. Computer Science, 2013.
[4] Mnih V, Kavukcuoglu K, Silver D, et al. Human-level control through deep reinforcement learning.[J]. Nature, 2015, 518(7540):529-33

[5]基于神经网络的批强化学习在Robocup中的应用

回复 ︿ (2)
  • 用户头像
    车慧敏 2年前
    0?1442652658
    尚苏宁 2年前
    为什么可以把路径规划,避碰,避障,协作等问题统一解决?

    因为传统强化学习的本质即“试错”,“试”出一个可用的方案

9745?1475547574
发布时间:03/05/2017 16:12
更新时间:03/05/2017 16:13

做硕士课题,其中一环是给定一张图片,在场景中查找相似的物体图像。以前一直以为就叫图像匹配,因而没查出什么东西来。偶然查到到原来是叫image retrieval,于是又打开了新世界的大门。(论机器人狗学机器学习的悲哀)


Image Retrieval 简介

    我们把基于图像内容的检索称为CBIR。CBIR属于基于内容检索(Content-based Retrieval,简称CBR)的一种,CBR中还包括对动态视频、音频等其它形式多媒体信息的检索技术。

    CBIR的核心是使用图像的可视特征对图像进行检索。本质上讲,它是一种近似匹配技术,融合了计算机视觉、图像处理、图像理解和数据库等多个领域的技术成果,其中的特征提取和索引的建立可由计算机自动完成,避免了人工描述的主观性。

    CBIR 的实现依赖于两个关键技术的解决:图像特征提取和匹配。


From http://yongyuan.name/blog/cbir-technique-summary.html

    图像检索过程简单说来就是对图片数据库的每张图片抽取特征(一般形式为特征向量),存储于数据库中,对于待检索图片,抽取同样的特征向量,然后并对该向量和数据库中向量的距离,找出最接近的一些特征向量,其对应的图片即为检索结果。

    基于内容的图像检索系统最大的难点在,其一为大部分神经网络产出的中间层特征维度非常高,比如Krizhevsky等的在2012的ImageNet比赛中用到的AlexNet神经网,第7层的输出包含丰富的图像信息,但是维度高达4096维。4096维的浮点数向量与4096维的浮点数向量之间求相似度,运算量较大,因此Babenko等人在论文Neural codes for image retrieval中提出用PCA对4096维的特征进行PCA降维压缩,然后用于基于内容的图像检索,此场景中效果优于大部分传统图像特征。同时因为高维度的特征之间相似度运算会消耗一定的时间,因此线性地逐个比对数据库中特征向量是显然不可取的。大部分的ANN技术都是将高维特征向量压缩到低维度空间,并且以01二值的方式表达,因为在低维空间中计算两个二值向量的汉明距离速度非常快,因此可以在一定程度上缓解时效问题。ANN的这部分hash映射是在拿到特征之外做的,本系统框架试图让卷积神经网在训练过程中学习出对应的『二值检索向量』,或者我们可以理解成对全部图先做了一个分桶操作,每次检索的时候只取本桶和临近桶的图片作比对,而不是在全域做比对,以提高检索速度。


源码推荐


Paper推荐




回复 ︿
9745?1475547574
发布时间:01/09/2017 13:59
更新时间:02/22/2017 19:19

文章:Plug & Play Generative Networks: Conditional Iterative Generation of Images in Latent Space 

2016年12月发在NIPS上,state of the art的,已开源。目前最好


我的理解

虽然本质上还是GAN,但对此作了很多改变了。之前出现的GAN、DCGAN、infoGAN等,都是一个生成网络G、一个对抗网络D,以某种博弈的方式对抗式地生成与现实分布相似的图像。而PPGN与他们的不同在于“plug and play”不同的condition components. 


最原始的GAN是无监督的,没有图片标签告诉GAN什么是什么,GAN自己学习这些来自真实世界图像的概率分布,从而能生成这些分布类似的数据,组合后形成生成的图像。后来出现了Condition的GAN,是通过同样的给G和D一个condition(说白了就是给点标签,变成半监督的),来形成指定类别的图像。


而PPGN的condition没这么做,他选择除了G和D之外再搞一个网络,而这个网络是我们前人玩过的ImageNet,CaffeNet、CaptionNet等(用C表述)。GAN该做什么还做什么,G生成的图像放到C里看能不能激活相对应的类别。到D和C都满意了,G再自己调一调就差不多了。讲道理,效果真的好到震惊:


这个很突破性啊,G和D都不用动的,C用imageNet就能生成指定类别的图像,C用CaptionNet就能根据描述生成图像,所以即插即用。这对现实应用的意义还是比较大的。


论文大致思想

现有局限:
  1. 之前已有的GAN模型都是使用较低的resolution(32*32像素),无法达到像128*128像素的高resolution。
  2. 只能根据训练生成几种类别,而无法训练出来像imageNet这样有1000个类的大数据集。
  3. 能生成的数据是在已有数据库的子集,而毫无泛化能力。

PPGN是融合了包括 GAN 在内的很多算法和技巧的新算法,整合了对抗训练、CNN 特征匹配、降噪自编码、Langevin采样等,它从 ImageNet 中生成了 227x227 的真实图片,是目前在这个数据集上跑得最惊人的一套算法。PPGN 生成的图像同类差异化大,可根据指定生成不同类别的图像、多类化,生成的图像清楚分辨率高。

无需重新训练G,只需要加入新的C即可
设计一个概率框架:
    先验:如使得图像看起来像真实的
    条件:已经训练好的分类模型(如让图像看起来像“钢琴”,或者既像钢琴又像蜡烛)
然后我们使用近似Metropolis-adjusted Langevin抽样算法显示如何从这样的模型迭代地进行抽样。
以上就被成为PPGN,特点为免于设计一个energy function,且能够即插即用不同的先验和条件来形成一个新的生成模型。
因此ppgn能够被用来由一个描述生成类似的图像,即text-to-image。做法是使用一个 recurrent, image-captioning network。

通过去噪自动编码DAE建模4种不同的学习先验方法。
DAE:当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)人为地引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE)。
Bengio对dAE的直观解释为:1.dAE有点类似人体的感官系统,比如人眼看物体时,如果物体某一小部分被遮住了,人依然能够将其识别出来,2.多模态信息输入人体时(比如声音,图像等),少了其中某些模态的信息有时影响也不大。3.普通的autoencoder的本质是学习一个相等函数,即输入和重构后的输出相等,这种相等函数的表示有个缺点就是当测试样本和训练样本不符合同一分布,即相差较大时,效果不好,明显,dAE在这方面的处理有所进步。


**PPGN网络介绍**
PPGN-x: DAE model of p(x)
直接使用DAE来建模p(x)。该DAE是有4层神经网络组成,由ImageNet的无标签图像训练。

X是图像,?是噪音,ImageNet classifier是imageNet

DGN-AM:sampling without a learned prior
不再从图像空间(如单个像素空间)中取样,而是从Generator的抽象high level的特征空间h中取样来重建图像x(h从预训练的编码器中提取)。
h是抽象的高级特征(如alexnet的fc6层)
将随机的h作为输入,对抗训练G,即由p(h)得到p(x)

PPGN-h: Generation and DAE model of p(h)
为了提高图像的合成速度以及图像的质量,我们试图通过多层感知机DAE建立一个学习的p(h)先验模型。

Joint PPGN-h:joint Generator and DAE
之前的结果表明,简单的多层感知机DAE在对fc6层特征建模上效果不好。为了解决这个问题,设计 h->x->h的DAE模型。
为了解决在PPGN-h上poor data的问题,提出G+E1+E2的模型作为DAE模型。除此之外还可以添加一个小的噪音h1。把整个系统看成是由4各交叉的模型组成:一个GAN和三个交叉的DAE(x,h1,h),且他们之间互相共享参数。这种模型混合比DGN-AM和PPGN-h快得多,产生更好的图像质量

Ablation study with Noiseless Joint PPGN-h

应用
  • Conditioning on classes。E: 已经预训练好的神经网络(如ImageNet,AlexNet),通过将图像x映射到有用的,抽象的高级特征空间h(这里是AlexNet的fc6层)来作为我们模型的编码器网络E分量。


  • Conditioning on captions。我们可以通过将带有RNN的图像描述网络附加到G的输出层,并执行类似的迭代采样来生成以caption为条件的图像。


    这样看来,PPGN与之前我们所说的GAN不是很一样的。传统的GAN是一个G一个D对抗得到p(x),而PPGN只用一个G和一个C,其中C即插即用,G对输入做循环对抗更新。


回复 ︿
9745?1475547574
发布时间:02/20/2017 16:52
更新时间:02/20/2017 16:52

接上一篇《GAN的Tensorflow最基本实现》


基础知识
    Recall:在GAN中分为G和D两个神经网络,如果我们想要定向地生成制指定的神经网络,则可以将两个网络同时限制在condition y上。因此现在的生成对抗网络编程G(z,y)和D(X,y)。

    我们从概率的观点来看,G(z, y)对我们数据的分布进行建模,即形成数据服从以下的分布:X~G(X|z,y)。对于discrimination,则有d~D(d|X,y)

因此,CGAN有:

与GAN的公式相比只是在D和G中都增加了参数y

CGAN的Tensorflow实现
就像前面介绍的一样,CGAN的实现也只需要在GAN上增加一点点东西

1. 增加condition y
y = tf.placeholder(tf.float32, shape=[None, y_dim])

2. 在G和D函数中增加关于y的约束

def generator(z):
     inputs = tf.concat(concat_dim=1, value=[z, y])#连接两个通道作为下一个网络层的输入
     #G_h1 = tf.nn.relu(tf.matmul(z, G_W1) + G_b1)
     G_h1 = tf.nn.relu(tf.matmul(inputs, G_W1) + G_b1)#只是把z换成inputs
     G_log_prob = tf.matmul(G_h1,G_W2) + G_b2
     #sigmod回归
     G_prob = tf.nn.sigmoid(G_log_prob)
     return G_prob

def discriminator(x):
     #跟generator同样的原理做改变,将x换成inputs,而inputs中加入y通道
     inputs = tf.concat(concat_dim=1, value=[x, y])
     D_h1 = tf.nn.relu(tf.matmul(inputs, D_W1) + D_b1)
     D_logit = tf.matmul(D_h1, D_W2) + D_b2
     D_prob = tf.nn.sigmoid(D_logit)
     return D_prob, D_logit


3 由于输入都变了,维度也变了,那么D_W1和G_W1的权重自然要变

# Modify input to hidden weights for discriminator
D_W1 = tf.Variable(shape=[X_dim + y_dim, h_dim])
# Modify input to hidden weights for generator
G_W1 = tf.Variable(shape=[Z_dim + y_dim, h_dim])


4 现在我们就只需要把他用起来,同样只是加上condition y
# Add additional parameter y into all networks
G_sample = generator(Z, y)
D_real, D_logit_real = discriminator(X, y)
D_fake, D_logit_fake = discriminator(G_sample, y)


回复 ︿
9745?1475547574
发布时间:02/20/2017 11:17
更新时间:02/20/2017 11:17
要看着GAN的公式来:

传统的GAN由两个网络组成:生成网络G和对抗网络D。Vanilla的文章中的算法如下:


代码实现

#coding=utf-8
import tensorflow as tf
import numpy as np

def xavier_init(size):
	in_dim = size[0]
	xavier_stddev = 1. / tf.sqrt(in_dim / 2.)
	return tf.random_normal(shape=size, stddev=xavier_stddev)

#Discriminator Net
X = tf.placeholder(tf.float32, shape=[None, 784], name='X')#minist手写数据集像素为28*28,为784,作为X输入

D_W1 = tf.Variable(xavier_init([784,128]), name='D_W1')#“Xavier”初始化方法是一种很有效的神经网络初始化方法
D_b1 = tf.Variable(tf.zeros(shape=[128]), name='D_b1')

D_W2 = tf.Variable(xavier_init([128,1]), name='D_W2')
D_b2 = tf.Variable(tf.zeros(shape=[1]), name='D_b2')

theta_D = [D_W1, D_W2, D_b1, D_b2]

#Generator Net
Z = tf.placeholder(tf.float32, shape=[None, 100], name='Z')

G_W1 = tf.Variable(xavier_init([100,128]), name='G_W1')
G_b1 = tf.Variable(tf.zeros(shape=[128]), name='G_b1')

G_W2 = tf.Variable(xavier_init([128,784]), name='G_W2')
G_b2 = tf.Variable(tf.zeros(shape=[784]), name='G_b2')

theta_G = [G_W1, G_W2, G_b1, G_b2]

def generator(z):
	#构造两层神经网络(G_W1*z + G_b1)*G_W2 + G_b2
	G_h1 = tf.nn.relu(tf.matmul(z, G_W1) + G_b1)#relu激活函数,tf.matmul(X,W)表示x乘以W
	G_log_prob = tf.matmul(G_h1,G_W2) + G_b2
	#sigmod回归
	G_prob = tf.nn.sigmoid(G_log_prob)
	return G_prob

def discriminator(x):
	#跟generator同样的形式构造两层神经网络
	D_h1 = tf.nn.relu(tf.matmul(x, D_W1) + D_b1)
	D_logit = tf.matmul(D_h1, D_W2) + D_b2
	D_prob = tf.nn.sigmoid(D_logit)
	return D_prob, D_logit

#下面就根据算法中的log(D(xi)) + log(1-D(G(zi)))...
G_sample = generator(Z) #G(z)
D_real, D_logit_real = discriminator(X)#D(xi)
D_fake, D_logit_fake = discriminator(G_sample)#D(G(z))

#求loss function的最大值,所以这里用负号
D_loss = -tf.reduce_mean(tf.log(D_real) + tf.log(1. - D_fake))#求平均值
G_loss = -tf.reduce_mean(tf.log(D_fake)) #as per the paper’s suggestion, it’s better to maximize tf.reduce_mean(tf.log(D_fake)) 
										#instead of minimizing tf.reduce_mean(1 - tf.log(D_fake)) in the algorithm above.

#只分别更新D(x)、G(x)的参数
D_solver = tf.train.AdamOptimizer().minimize(D_loss, var_list=theta_D)
G_solver = tf.train.AdamOptimizer().minimize(G_loss, var_list=theta_G)

def sample_Z(m, n):
	#uniform prior for G(z)
	return np.random.uniform(-1., 1., size=[m, n])

for it in range(1000000):
	X_mb, _ = minst.train.next_batch(mb_size)
	_, D_loss_curr = sess.run([D_solver, D_loss], feed_dict={X:X_mb, X:sample_Z(mb_size, Z_dim)})
	_, G_loss_curr = sess.run([G_solver, G_loss], feed_dict={Z:sample_Z(mb_size, Z_dim)})

回复 ︿
9745?1475547574
发布时间:02/19/2017 11:51
更新时间:02/19/2017 16:30



1.占位符


x = tf.placeholder(tf.float32, [None, 10])
y = tf.placeholder("float")
z = tf.placeholder(tf.int32)

比如训练图像时候 feed 需要传递 python中的 tuple元祖 feed_dict={x: xdata, y: ydata} ,当执行op操作时候 feed传入替换 ,执行完后销毁 X 为图像数据 Y为图像标签,这样的时候 X Y 都是来自训练测试数据,所以前面需要定义2个用来传递的占位符来传递X Y 


Tf.placeholder(dtype, shape=None, name=None)
其中shape标书约束维度,如shape=(1024, 1024)约束为1024*1024的二维数组。

2.变量 

    变量是tensorflow中随时用来计算“变化”“操作”“共享”的量。OP操作在py中传递的是ndarray的多维数组,多维数组在tensorflow中的表示就是变量。


w = tf.Variable(0.0, name="weights")
b=  tf.Variable (tf.zeros([100]),name=“bias”)

Variable的第一个参数(w的值)是常量,但会根据后续的操作产生变化。更新w可以使用session.run([w])。若要使用常亮,则用 


k = tf.constant(3.0) #表示定义一个值为3.0的常量



3.Session 会话

     TensorFlow  通过回话进行“连接”操作执行所有的op(操作)形成一个有向图,进行执行运行图计算graph compute。


init = tf.initialize_all_variables()
with tf.Session() as session:
   session.run(init)#1.第一个图的节点op   
   session.run(googlenet)#2.第二个图的节点op 1-2-n
   sess.close()#释放资源
InteractiveSession交互式回话session: sess = tf.InteractiveSession()


一个栗子

import tensorflow as tf
import numpy as np

# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300

# 构造一个线性模型
# 
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

# 初始化变量
init = tf.initialize_all_variables()

# 启动图 (graph)
sess = tf.Session()
sess.run(init)

# 拟合平面
for step in xrange(0, 201):
    sess.run(train)
    if step % 20 == 0:
        print step, sess.run(W), sess.run(b)

# 得到最佳拟合结果 W: [[0.100  0.200]], b: [0.300]


回复 ︿
9745?1475547574
发布时间:12/14/2016 10:58
更新时间:02/14/2017 10:03

【写在前面】为什么一定要读这篇文章。虽然很多人说这篇文章只是改进了一点GAN,其学术贡献并不多大,但他讲源码开源,我们发现后续的text-to-image,preNet等优秀工作都是基于这篇文章的。它对监督学习和无监督学习的结合使得我们对GAN有更确切的把握,对于工程类的学术研究有很好的学习意义。


【摘要】近年来 CNN 在监督学习领域的巨大成功 和 无监督学习领域的无人问津形成了鲜明的对比,缩短CNN对于有监督学习和无监督学习的差距。因而提出深度卷积生成网络,用于generate 图片,同时将其用于新的任务以观察其泛化性能。本文提出了一种 改进的GAN:deep convolutional generative adversarial networks (DCGANs),与GAN不同的是它有某些架构约束,类似于一种半监督学习的方法。


1. Introduction

    在计算机视觉领域,可以通过海量无标签数据(如无标签的图片和视频),学习到好的表示(good immediate representation)然后将其应用到各种监督学习任务中,例如:image classification。一种较好的build good image representations的方法就是,利用GAN(生成式对抗网络)来完成,然后利用 生成器 和 判别器的一部分来作为特征提取器,进行其他监督任务的学习。众所周知,GANs 的缺点是:unstable to train ,这样就会导致产生了毫无意义的输出。甚少有文章尝试去理解和可视化 GANs 到底学习到了什么,以及多层 GANs 的即可表示。
  本文的贡献点在于:
  1. 本文提出一些网络结构上的约束,使得训练过程更加稳定。并将此类型的结构称为:Deep Convolutional GANs (DCGAN) 
  2. 利用训练好的判别器进行图像识别任务,取得了和其他无监督学习算法相当的结果 
  3. 我们将 GANs 的 filter 进行了可视化处理,表明特定的 filter 学到了 绘制特定的物品 
  4. 我们利用生成器的arithmetic属性,允许通过向量操作,按照我们的意向生成样本。


2. Approach and Model Architecture

    本文核心的方法,主要从以下三个方面进行网络结构上的设计和改变 

  • 全卷积网络all convolutional net):用strided convolutions取代deterministic spatial pooling functions,使得网络可以学习自己的 spatial downsampling(??这个方法没看懂,可以去看看all convolutional net的原理)。把这个方法用到我们的生成器中,允许其学习自己的spatial upsampling, and discriminator.
  • 使用如图1的网络结构,消除卷积后的全连接层,如图使用4个卷积层,而没有像传统CNN那样前几个卷积层,几个pooling层,最后后一两个全连接层。原因是作者发现:global average pooling 增强了模型的稳定性,但是损害了收敛的速度。网络中的Z是用高斯分布的方式随机给的噪音,作为输入(Z可以看做是个全连接层,但是这个是最为输入的,要输出的是个4x4的tensor),它被投射到具有许多特征图的小空间范围卷积核中。

图1. DCGAN网络结构


  • Batch Normalization。我之前转过一篇知乎文讲Batch Normalization讲的很通俗。Batch Normalization通过将每个单元的输入归一化以具有零均值和单位方差来稳定学习。这有助于处理由于初始化不良而导致的训练问题,并帮助更深层模型中的梯度流。但是,直接对所有的 layer 都使用这种技术,就会出现问题:resulted in sample oscillation and model instability 。这种困难是通过 不对 generator output layer 和 discriminator input layer 采用这种方法,就行了。


3. Details of Adversarial Training

    作者在三个数据集上进行了训练,分别是:Large-scale Scene Understanding (LSUN),Image Net-1k and Faces dataset 

    使用的方法:

  • mini-batch stochastic gradient descent (SGD) with a mini-batch size of 128
  • a zero-centered Normal distribution with standard deviation 0.02
  • In the LeakyReLU, the slope of the leak was set to 0.2
  • learning rate of 0.0002

    对于LSUN卧室的图像,用意是证明我们的模型不是通过简单过拟合/记忆训练产生高质量样本的。没有数据增加应用于图像。图2经过了一次训练,图三经历了5次,如果我们的网络训练时间久了会过拟合,那图三就会是高清图了,然而事实并没有那样。



4. 训练细节

  • 预处理环节,将图像scale到tanh的[-1, 1]。
  • mini-batch训练,batch size是128.
  • 所有的参数初始化由(0, 0.02)的正态分布中随即得到
  • LeakyReLU的斜率是0.2.
  • 虽然之前的GAN使用momentum来加速训练,DCGAN使用调好超参的Adam optimizer。
  • learning rate=0.0002
  • 将momentum参数beta从0.9降为0.5来防止震荡和不稳定。


回复 ︿
9745?1475547574
创建时间:01/13/2017 11:20
点击展开更多
问题和建议
还能输入50个字符 Submit

加入QQ群

关注微信APP


×