第一次写博客,希望大家担待,一起学习,一起进步!
1.导入模块并且指定模型输入维度
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from keras.datasets import mnist
from keras.layers import Dense, Flatten, Reshape
from keras.layers.advanced_activations import LeakyReLU
from keras.models import Sequential
from keras.optimizer_v2 import adam as Adam
此处是直接从keras中直接导入的mnist手写数据集
提醒大家注意一下那个优化器导入的时候后面有个_v2,我最开始没有注意到这个,一直报错。
2.模型输入维度
img_rows = 28
img_cols = 28
channels = 1
# 图像输入的维度
img_shape = (img_rows, img_cols, channels)
# 噪声向量的大小,用作生成器的输入
z_dim = 100
mnist数据集中每张图片都是28*28像素的单通道图像。
3.生成器
def build_generator(img_shape, z_dim):
model = Sequential()
# 全连接层
model.add(Dense(128, input_dim=z_dim))
# Leaky ReLU 激活函数
model.add(LeakyReLU(alpha=0.01))
# 带有tanh函数的激活层
model.add(Dense(28 * 28 * 1, activation='tanh'))
# 将生成器的输出改变为图像尺寸
model.add(Reshape(img_shape))
return model
这个生成器只有一个隐藏层的神经网络。此处使用的是LeakyReLU激活函数,它的好处是存在一个小的正梯度,这样可以防止梯度在训练中消失。在输出层使用tanh而不是使用sigmoid。
4.鉴定器
def build_discriminator(img_shape):
model = Sequential()
# 将输入图像展平
model.add(Flatten(input