SRGAN的判别器部分代码简单说明版

SRGAN的判别器部分代码简单说明版(个人使用)

一个简单的SRGAN判别器,代码跟常规的判别器相差不大

import math
import tensorflow as tf
from keras.initializers import random_normal
from keras import layers
from keras.applications import VGG19
from keras.models import Model       #需要用到的模块

def d_block(inputs, filters, strides=1):  #块组件,包含一个卷积层,一个BN层,一个激活层
    x = layers.Conv2D(filters, kernel_size=3, strides=strides, padding='same', kernel_initializer = random_normal(stddev=0.02))(inputs)                          
    x = layers.BatchNormalization(momentum=0.5)(x)
    x = layers.LeakyReLU(alpha=0.2)(x)   #常用的非线性函数relu的变形,将负的部分乘以一个很小的参数,这里为0.2
    return x


def build_discriminator(hr_shape):     #定义一个判别器 
    inputs = layers.Input(shape=hr_shape)     #判别器的input

    x = layers.Conv2D(64, kernel_size=3, strides=1, padding='same', kernel_initializer = random_normal(stddev=0.02))(inputs)           #常用的卷积,卷积核大小为3*3,数目为64,步长为1,边缘填充,按正态分布生成随机张量,标准差为0.02;里面有个“data_format”,默认最后一维为通道数,如果不是,则要修改;
    x = layers.LeakyReLU(alpha=0.2)(x)      #常用的非线性函数relu的变形,将负的部分乘以一个很小的参数,这里为0.2

    x = d_block(x, 64, strides=2)    #将上面定义的块组件进行组合,若不指定strides,则默认为定义的1
    x = d_block(x, 128)
    x = d_block(x, 128, strides=2)
    x = d_block(x, 256)
    x = d_block(x, 256, strides=2)
    x = d_block(x, 512)
    x = d_block(x, 512, strides=2)

    x = layers.GlobalAveragePooling2D()(x)    #全局平均池化,深度神经网络中经常使用的一个层,使用前后的尺寸分别为[B,H,W,C]->[B,C].特别要注意,这个层使用之后特征图尺寸的维度变成了2维而非4维。
    x = layers.Dense(1024, kernel_initializer = random_normal(stddev=0.02))(x)      #全连接层,输出层为1024,正态初始化,标准差为0.02
    x = layers.LeakyReLU(alpha=0.2)(x) 
    validity = layers.Dense(1, activation='sigmoid', kernel_initializer = random_normal(stddev=0.02))(x)   # #全连接层,输出层为1,正态初始化,标准差为0.02,激活函数为sigmoid,输出为0到1;
    return Model(inputs, validity)      #使用inputs与outputs建立函数链式模型;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值