def discriminator(input_shape, optimizer, d_activation, d_batchnorm, dropout=0.1, width_modifier=0.5): D = Sequential() # Input layer input_layer_width = input_shape D.add(Dense(input_layer_width, input_shape=(input_layer_width, ))) D.add(d_activation) if d_batchnorm: D.add(BatchNormalization()) D.add(Dropout(dropout)) # First Hidden Layer first_layer_width = int(input_shape * width_modifier) D.add(Dense(first_layer_width)) D.add(d_activation) if d_batchnorm: D.add(BatchNormalization()) D.add(Dropout(dropout)) # Second Hidden Layer second_layer_width = int(input_shape * width_modifier) D.add(Dense(second_layer_width)) D.add(d_activation) if d_batchnorm: D.add(BatchNormalization()) D.add(Dropout(dropout)) # Third Hidden Layer third_layer_width = int(input_shape * width_modifier) D.add(Dense(third_layer_width)) D.add(d_activation) if d_batchnorm: D.add(BatchNormalization()) D.add(Dropout(dropout)) # Output D.add(Dense(1, activation='sigmoid')) D._name = 'discriminator' D.compile(optimizer=optimizer, loss=label_smooth_sigmoid, metrics=['accuracy']) D.summary() return D
def generator(num_inputs, output_shape, optimizer, g_activation, g_batchnorm, generator_activation, dropout = 0.1, width_modifier = 0.5): G = Sequential() # Input layer input_layer_width = num_inputs G.add(Dense(input_layer_width, input_shape = (input_layer_width,))) G.add(g_activation) if g_batchnorm: G.add(BatchNormalization()) G.add(Dropout(dropout)) # First Hidden Layer first_layer_width = int(num_inputs * width_modifier) G.add(Dense(first_layer_width)) G.add(g_activation) if g_batchnorm: G.add(BatchNormalization()) G.add(Dropout(dropout)) # Second Hidden Layer second_layer_width = int(num_inputs * width_modifier) G.add(Dense(second_layer_width)) G.add(g_activation) if g_batchnorm: G.add(BatchNormalization()) G.add(Dropout(dropout)) # Third Hidden Layer third_layer_width = int(num_inputs * width_modifier) G.add(Dense(third_layer_width)) G.add(g_activation) if g_batchnorm: G.add(BatchNormalization()) G.add(Dropout(dropout)) # Output layer G.add(Dense(output_shape, activation = 'sigmoid')) G._name = 'generator' G.compile(optimizer = optimizer, loss = 'categorical_crossentropy') G.summary() return G