DCGANs: 用DCGAN生成图片(MNIST)

由于接下来要做医学图像的东西,老板先让我跑着TF来玩玩积累经验。
作为一个非计算机科班出身的人,写代码与理解代码的能力尤为重要。
本文根据参考博客(当然原博客很多细节没强调到甚至是错的)进行了代码修改和体会,其中收益颇多。

强调: 学习本博客一定要参考原博客的详细过程阐释作为基础,同时结合我代码里面的注释,才能达到最佳的学习效果。
重点:
  • 对于generator的理解,请参考DCGAN原arxiv论文,其中值得注意的是在U-net曾经出现过的’deconvolution layer’实际上称为‘fractionally-strided convolution layer’
  • 对于参考博客中generator存在的问题进行了修正,主要体现在tf.add(H_conv1, b_conv1)的修正
  • 对于reuse经常出现的问题进行深度挖掘发现,自己对‘reuse’的使用不熟悉
    if (reuse):tf.get_variable_scope().reuse_variables(),因为在discriminnator应用到生成图像的时候,肯定需要原有的参数,所以要保证reuse=True,因此有了Dg = model.discriminator(Gz, reuse=True)的代码。
  • 多说一句:tf.variable_scope()工作域中的reuse=False为默认,且要知道reuse具有继承性质,细节请参考这篇简书,写的相当好!
  • 对于tf.nn.conv2d_transpose()的理解,请一定仔细理解为什么需要output_shape,因为不指定的话,输出的shape形式不唯一
  • 一定要学会在pool时候的size变换,这不仅仅关系到卷积,更多的时候关系到”反卷积“的size变换
  • 代码共分为两段,第一段为model.py着重在于建模;第二段为train.py着重于训练。
  • 本博客中的代码跟原博客的代码有所不同,这代表着博主自己的’思考’

俗话说磨刀不误砍柴功,先仔细结合原博客仔细理解tf编程的思路,以及DCGAN的实现细节,才能知道关键问题会在哪里出现。
俗话还说,实践出真知,一定要玩玩自己的数据集才知道问题在哪里,接下来会相应更新自己用DCGAN生成医学图像的代码,让大家体会下笨蛋的成长之路。

# -*- coding: utf-8 -*-
"""
Created on Tue Jul 24 20:33:14 2018
E-mail: Eric2014_Lv@sjtu.edu.cn
@author: DidiLv
File name: model.py
"""


import tensorflow as tf
import numpy as np


# import data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/") # MNIST dataset

# pooling and convolution definition
def conv2d(x, W):
    return tf.nn.conv2d(input = x, filter = W, strides = [1,1,1,1], padding = 'SAME')

def avg_pool_2x2(x):
    return tf.nn.avg_pool(x, ksize = [1,2,2,1], strides = [1,2,2,1], padding = 'SAME')

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
def discriminator(x_image, reuse=False):
    with tf.variable_scope('discriminator') as scope:
    ## here omit the reuse since the tf.variable_scope().reuse == False by default
        if (reuse):
            tf.get_variable_scope().reuse_variables()
        #First Conv and Pool Layers
        W_conv1 = tf.get_variable('d_wconv1', shape = [5, 5, 1, 8], initializer=tf.truncated_normal_initializer(stddev=0.02))
        b_conv1 = tf.get_variable('d_bconv1'</
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值