在caffe 中实现Generative Adversarial Nets(一)
来源:互联网 发布:天津淘宝图片拍摄 编辑:程序博客网 时间:2024/06/05 21:21
目录
- 目录
- 一Generative Adversarial Nets
- GAN简介
- GAN训练过程
- 二Deep Convolutional GANs DCGAN
- DCGAN 网络结构
- DCGAN caffe prototxt
- 生成结果
- 一Generative Adversarial Nets
一、Generative Adversarial Nets
1. GAN简介
对抗生成网络(GAN)同时训练两个模型:能够得到数据分布的生成模型(generative model G)和能判够区别数据是生成的还是真实的判别模型 (discriminative model D)。训练过程使得G生成的数据尽可能真实,同时又使得D尽可能能够区分生成的数据和真实的数据,最终G生成数据足以以假乱真,而D输出数据的概率均为0.5 。 参考论文:Bengio大神的 Generative Adversarial Networks
2. GAN训练过程
注意:这里的loss在更新D梯度是上升方向,在caffe具体实现时,为了使得D模型梯度更新为梯度的下降方向,loss等价改为:
二、Deep Convolutional GANs (DCGAN)
1. DCGAN 网络结构
DCGAN 用卷积神经(CNN)代替GAN中用多层感知器(MLP)实现D和G,后生成图片效果显著提升。参考论文Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Neworks
- DCGAN网络结构图
- DCGAN结构内容
2. DCGAN caffe prototxt
1.train.prototxt
# Create on: 2016/10/22 ShanghaiTech# Author: Yingying Zhangname: "gan_newface"layer { name: "images" type: "ImageData" top: "face_images" top: "label" include { phase: TRAIN } transform_param { mirror: true mean_value: [127.5] scale: 0.00784314 } image_data_param { source: "data/face_data.txt" root_folder: "data/" batch_size: 128 new_height: 64 new_width: 64 is_color: true shuffle: true }}layer { name: "rand_vec" type: "RandVec" top: "rand_vec" rand_vec_param { batch_size: 128 dim: 100 lower: -1.0 upper: 1.0 repeat: 3 }}layer { name: "silence" type: "Silence" bottom: "label"}#----------- generative -----------layer { name: "ip1" type: "InnerProduct" bottom: "rand_vec" top: "ip1" param { name: "ip_w_g" lr_mult: 1 } param { name: "ip_b_g" lr_mult: 2 } inner_product_param{ num_output: 16384 gen_mode: true weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "ip1_reshape" type: "Reshape" bottom: "ip1" top: "ip1_reshape" reshape_param { shape { dim: 0 dim: 1024 dim: 4 dim: 4 } }}layer { name: "batch_norm_g1" type: "BatchNorm" bottom: "ip1_reshape" top: "ip1_reshape" param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } batch_norm_param { use_global_stats: false }}layer { name: "scale_batch_g1" type: "Scale" bottom: "ip1_reshape" top: "ip1_reshape" param { name: "gen_s1" lr_mult: 1 decay_mult: 1 } param { name: "gen_b1" lr_mult: 1 decay_mult: 1 } scale_param { bias_term: true gen_mode: true }}layer { name: "relu_g1" type: "ReLU" bottom: "ip1_reshape" top: "ip1_reshape"}layer { name: "gen_conv2" type: "Deconvolution" bottom: "ip1_reshape" top: "gen_conv2" param { name: "gen_w_2" lr_mult: 1 } param { name: "gen_b_2" lr_mult: 2 } convolution_param { num_output: 512 pad: 2 kernel_size: 5 stride: 2 gen_mode: true shape_offset: [1, 1] weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "batch_norm_g2" type: "BatchNorm" bottom: "gen_conv2" top: "gen_conv2" param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } batch_norm_param { use_global_stats: false }}layer { name: "scale_batch_g2" type: "Scale" bottom: "gen_conv2" top: "gen_conv2" param { name: "gen_s2" lr_mult: 1 decay_mult: 1 } param { name: "gen_b2" lr_mult: 1 decay_mult: 1 } scale_param { gen_mode: true bias_term: true }}layer { name: "relu_g2" type: "ReLU" bottom: "gen_conv2" top: "gen_conv2"}layer { name: "gen_conv3" type: "Deconvolution" bottom: "gen_conv2" top: "gen_conv3" param { name: "gen_w_3" lr_mult: 1 } param { name: "gen_b_3" lr_mult: 2 } convolution_param { num_output: 256 pad: 2 kernel_size: 5 stride: 2 gen_mode: true shape_offset: [1, 1] weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "batch_norm_g3" type: "BatchNorm" bottom: "gen_conv3" top: "gen_conv3" param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } batch_norm_param { use_global_stats: false }}layer { name: "scale_batch_g3" type: "Scale" bottom: "gen_conv3" top: "gen_conv3" param { name: "gen_s3" lr_mult: 1 decay_mult: 1 } param { name: "gen_b3" lr_mult: 1 decay_mult: 1 } scale_param { gen_mode: true bias_term: true }}layer { name: "relu_g3" type: "ReLU" bottom: "gen_conv3" top: "gen_conv3"}layer { name: "gen_conv4" type: "Deconvolution" bottom: "gen_conv3" top: "gen_conv4" param { name: "gen_w_4" lr_mult: 1 } param { name: "gen_b_4" lr_mult: 2 } convolution_param { num_output: 128 pad: 2 kernel_size: 5 stride: 2 gen_mode: true shape_offset: [1, 1] weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "batch_norm_g4" type: "BatchNorm" bottom: "gen_conv4" top: "gen_conv4" param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } batch_norm_param { use_global_stats: false }}layer { name: "scale_batch_g4" type: "Scale" bottom: "gen_conv4" top: "gen_conv4" param { name: "gen_s4" lr_mult: 1 decay_mult: 1 } param { name: "gen_b4" lr_mult: 1 decay_mult: 1 } scale_param { gen_mode: true bias_term: true }}layer { name: "relu_g4" type: "ReLU" bottom: "gen_conv4" top: "gen_conv4"}layer { name: "gen_conv5" type: "Deconvolution" bottom: "gen_conv4" top: "gen_conv5" param { name: "gen_w_5" lr_mult: 1 } param { name: "gen_b_5" lr_mult: 2 } convolution_param { num_output: 3 pad: 2 kernel_size: 5 stride: 2 gen_mode: true shape_offset: [1, 1] weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "tanh_g5" type: "TanH" bottom: "gen_conv5" top: "gen_conv5"}#----------- gan gate ------------layer { name: "gan_gate" type: "GANGate" bottom: "face_images" bottom: "gen_conv5" top: "dis_input"}#----------- discrimitive -----------layer { name: "dis_conv_d1" type: "Convolution" bottom: "dis_input" top: "dis_conv_d1" param { name: "dis_w_1" lr_mult: 1 } param { name: "dis_b_1" lr_mult: 2 } convolution_param { num_output: 128 pad: 2 kernel_size: 5 stride: 2 dis_mode: true weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "batch_norm_d1" type: "BatchNorm" bottom: "dis_conv_d1" top: "dis_conv_d1" param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } batch_norm_param { use_global_stats: false }}layer { name: "scale_batch_d1" type: "Scale" bottom: "dis_conv_d1" top: "dis_conv_d1" param { name: "dis_s1" lr_mult: 1 decay_mult: 1 } param { name: "dis_b1" lr_mult: 1 decay_mult: 1 } scale_param { dis_mode: true bias_term: true }}layer { name: "relu_d1" type: "ReLU" bottom: "dis_conv_d1" top: "dis_conv_d1" relu_param { negative_slope: 0.2 }}layer { name: "dis_conv_d2" type: "Convolution" bottom: "dis_conv_d1" top: "dis_conv_d2" param { name: "dis_w_2" lr_mult: 1 } param { name: "dis_b_2" lr_mult: 2 } convolution_param { num_output: 256 pad: 2 kernel_size: 5 stride: 2 dis_mode: true weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "batch_norm_d2" type: "BatchNorm" bottom: "dis_conv_d2" top: "dis_conv_d2" param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } batch_norm_param { use_global_stats: false }}layer { name: "scale_batch_d2" type: "Scale" bottom: "dis_conv_d2" top: "dis_conv_d2" param { name: "dis_s2" lr_mult: 1 decay_mult: 1 } param { name: "dis_b2" lr_mult: 1 decay_mult: 1 } scale_param { dis_mode: true bias_term: true }}layer { name: "relu_d2" type: "ReLU" bottom: "dis_conv_d2" top: "dis_conv_d2" relu_param { negative_slope: 0.2 }}layer { name: "dis_conv_d3" type: "Convolution" bottom: "dis_conv_d2" top: "dis_conv_d3" param { name: "dis_w_3" lr_mult: 1 } param { name: "dis_b_3" lr_mult: 2 } convolution_param { num_output: 512 pad: 2 kernel_size: 5 stride: 2 dis_mode: true weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "batch_norm_d3" type: "BatchNorm" bottom: "dis_conv_d3" top: "dis_conv_d3" param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } batch_norm_param { use_global_stats: false }}layer { name: "scale_batch_d3" type: "Scale" bottom: "dis_conv_d3" top: "dis_conv_d3" param { name: "dis_s3" lr_mult: 1 decay_mult: 1 } param { name: "dis_b3" lr_mult: 1 decay_mult: 1 } scale_param { dis_mode: true bias_term: true }}layer { name: "relu_d3" type: "ReLU" bottom: "dis_conv_d3" top: "dis_conv_d3" relu_param { negative_slope: 0.2 }}layer { name: "dis_conv_d4" type: "Convolution" bottom: "dis_conv_d3" top: "dis_conv_d4" param { name: "dis_w_4" lr_mult: 1 } param { name: "dis_b_4" lr_mult: 2 } convolution_param { num_output: 1024 pad: 2 kernel_size: 5 stride: 2 dis_mode: true weight_filler { type: "gaussian" std: 0.02 } bias_filler { type: "constant" value: 0 } }}layer { name: "batch_norm_d4" type: "BatchNorm" bottom: "dis_conv_d4" top: "dis_conv_d4" param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } param { lr_mult: 0 decay_mult: 0 } batch_norm_param { use_global_stats: false }}layer { name: "scale_batch_d4" type: "Scale" bottom: "dis_conv_d4" top: "dis_conv_d4" param { name: "dis_s4" lr_mult: 1 decay_mult: 1 } param { name: "dis_b4" lr_mult: 1 decay_mult: 1 } scale_param { dis_mode: true bias_term: true }}layer { name: "relu_d4" type: "ReLU" bottom: "dis_conv_d4" top: "dis_conv_d4" relu_param { negative_slope: 0.2 }}layer { name: "score" type: "InnerProduct" bottom: "dis_conv_d4" top: "score" param { name: "score_w" lr_mult: 1 } param { name: "score_b" lr_mult: 2 } inner_product_param{ num_output: 1 dis_mode: true weight_filler { type: "gaussian" std: 0.0002 } bias_filler { type: "constant" value: 0 } }}layer { name: "sigmoid" type: "Sigmoid" bottom: "score" top: "score"}layer { name: "gan_loss" type: "GANDGLoss" bottom: "score" top: "gan_loss" gan_loss_param { dis_iter: 1 gen_iter: 2 }}
2.solver.prototxt
# Create on: 2016/10/22 ShanghaiTech# Author: Yingying Zhangnet: "gan_configs/train.prototxt"debug_info: falsedisplay: 10solver_type: ADAMaverage_loss: 100base_lr: 2e-4lr_policy: "fixed"max_iter: 15000momentum: 0.5snapshot: 100gan_solver: truesnapshot_prefix: "models/gan_"
3.生成结果
未完待续!!!第二部分为caffe具体源码!
4 0
- 在caffe 中实现Generative Adversarial Nets(一)
- 在caffe 中实现Generative Adversarial Nets(二)
- Generative Adversarial Nets(译)
- Generative Adversarial Nets(译)
- Generative Adversarial Nets(译)
- Generative Adversarial Nets(译)
- Generative Adversarial Nets(GAN) Tensorflow实现
- GAN(Generative Adversarial Nets)研究进展
- Generative Adversarial Nets
- Generative Adversarial Nets
- GAN: Generative Adversarial Nets
- Generative Adversarial Nets
- Generative Adversarial Nets
- Triple Generative Adversarial Nets
- Conditional Generative Adversarial Nets
- Generative Adversarial Nets
- 深度学习笔记一:生成对抗网络(Generative Adversarial Nets)
- 阅读小结:Generative Adversarial Nets
- 链表的基本操作
- mybatis 关联查询时,从表只返回第一条记录解决办法
- 待做的题目
- tar命令的简单使用
- redis 数据类型以及应用场景简介
- 在caffe 中实现Generative Adversarial Nets(一)
- Python语言关于文件操作
- 内部类
- R语言学习笔记(3)
- HDU:2319 Card Trick
- FineReport连接Oracle数据库的问题汇总
- HDU4417 主席树入门2
- 关于流式布局与热门标签
- Jquery小结