def simple_model(features=16, layers=1, name=None): """Creates and returns a simple keras model Fully connected model: -Flatten board grid into vector -`layers` # of Dense layers with `features` # of nodes -Dense layer with 8 nodes -Dense layer of size 4 using softmax for output Args: features: number of nodes for middle layers Defaults to 16 layers: number of middle layers Defaults to 1 name: optional name for model """ model = Sequential() if name: model.name = name model.add(Flatten(input_shape=(SIZE, SIZE))) # TODO: Test effect of batch norm for _ in range(layers): model.add(Dense(features, activation='relu')) model.add(Dense(8, activation='relu')) model.add(Dense(4, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam') return model
def train_discriminator(y_pred_in, y_pred_out, validation_data, featuremap_attacker): if featuremap_attacker is None: model = Sequential() model.name = "featuremap_mia" model.add(Dense(input_shape=(y_pred_in.shape[1:]), units=500)) model.add(Dropout(0.2)) model.add(Dense(units=250)) model.add(Dropout(0.2)) model.add(Dense(units=10)) model.add(Dense(units=1, activation="sigmoid")) model.compile(optimizer="Adam", metrics=["accuracy"], loss="binary_crossentropy") featuremap_attacker = model featuremap_attacker.fit(np.concatenate((y_pred_in, y_pred_out), axis=0), np.concatenate((np.zeros(len(y_pred_in)), np.ones(len(y_pred_out)))), validation_data=validation_data, epochs=epochs, verbose=0) return featuremap_attacker
def _create_one_layer_model(input_shape: Optional[tuple], actions_count: int, units: int) -> Sequential: model = Sequential() model.name = "one-hidden-layer-" + str(units) model.add(Dense(units=units, input_shape=input_shape, activation='relu')) model.add(Dense(units=actions_count, activation='linear')) model.compile(loss='mse', optimizer='adam') return model