生成网络的作用是输入一行正态分布的随机数,生成MNIST手写体图片,因此它的输入是一个随机向量,输出为手写数字图片。这里定义向量长度为100,图像大小为(28,28,1)。示例代码如下:
def build_generator(self):
noise_shape=(100,)
model=Sequential()
#layer1(None,100)>>(None,256)
model. add(Dense(256,input_shape=noise_shape))
model. add(LeakyReLU(alpha=0.2))
model. add(BatchNormalization(momentum=0.8))
#layer2(None,256)>>(None,5 12)
model. add(Dense(5 12))
model. add(LeakyReLU(alpha=0.2))
model. add(BatchNormalization(momentum=0.8))
#layer3(None,5 12)>>(None,1024)
model. add(Dense(1024))(www.xing528.com)
model. add(LeakyReLU(alpha=0.2))
model. add(BatchNormalization(momentum=0.8))
#layer4(None,1024)>>(None,784)
#np. prod返回数组内元素的乘积
model. add(Dense(np.prod(self.img_shape),activation='tanh'))
#784=>(28,28,1)
model. add(Reshape(self.img_shape))
model. summary()
noise=Input(shape=noise_shape)
img=model(noise)
return Model(noise, img)
从上面的代码可以看出,生成器采用了包含三个隐含层的全连接网络,输入为长度100的向量,输出为长度784的向量,对应28×28×1的图像。其目标是将一维的向量转换为对应图像的二维矩阵,代码中采用了批量标准化BatchNormaliza-tion。其目的是对数据进行预处理,让平均值接近于0,标准差接近1,可以消除数据在数值上的大幅变化对网络学习的影响,突出数据的概率分布特点,有助于加速网络收敛。此外,生成器网络的隐含层采用了LeakyReLU激活函数,输出层采用了tanh激活函数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。