Returns:
Model: Discriminator model
“”"
kernel_size = 5
layer_filters = [32,64,128,256]
x = inputs
for filters in layer_filters:
if filters == layer_filters[-1]:
strides = 1
else:
strides = 2
x = keras.layers.LeakyReLU(0.2)(x)
x = keras.layers.Conv2D(filters=filters,
kernel_size=kernel_size,
strides=strides,
padding=‘same’)(x)
x = keras.layers.Flatten()(x)
outputs = keras.layers.Dense(1)(x)
if activation is not None:
print(activation)
outputs = keras.layers.Activation(activation)(outputs)
if num_labels:
layer = keras.layers.Dense(layer_filters[-2])(x)
labels = keras.layers.Dense(num_labels)(layer)
labels = keras.layers.Activation(‘softmax’,name=‘label’)(labels)
1-dim continous Q of 1st c given x
code1 = keras.layers.Dense(1)(layer)
code1 = keras.layers.Activation(‘sigmoid’,name=‘code1’)(code1)
1-dim continous Q of 2nd c given x
code2 = keras.layers.Dense(1)(layer)
code2 = keras.layers.Activation(‘sigmoid’,name=‘code2’)(code2)
outputs = [outputs,labels,code1,code2]
return keras.Model(inputs,outputs,name=‘discriminator’)
模型构建
#mi_loss
def mi_loss(c,q_of_c_give_x):
“”"mi_loss = -c * log(Q(c|x))
“”"
return K.mean(-K.sum(K.log(q_of_c_give_x + K.epsilon()) * c,axis=1))
def build_and_train_models(latent_size=100):
“”"Load the dataset, build InfoGAN models,
Call the InfoGAN train routine.
“”"
(x_train,y_train),_ = keras.datasets.mnist.load_data()
image_size = x_train.shape[1]
x_train = np.reshape(x_train,[-1,image_size,image_size,1])
x_train = x_train.astype(‘float32’) / 255.
num_labels = len(np.unique(y_train))
y_train = keras.utils.to_categorical(y_train)
#超参数
model_name