def train( train_nodes, train_targets, val_nodes, val_targets, generator, dropout, layer_sizes, learning_rate, activations, num_epochs, ): """ Train a GCN model on the specified graph G with given parameters, evaluate it, and save the model. Args: train_nodes: A list of train nodes train_targets: Labels of train nodes val_nodes: A list of validation nodes val_targets: Labels of validation nodes generator: A FullBatchNodeGenerator dropout: The dropout (0->1) Initial Learning rate layer_sizes: A list of number of hidden nodes in each layer learning_rate: Initial Learning rate activations: A list of number of activation functions in each layer """ train_gen = generator.flow(train_nodes, train_targets) val_gen = generator.flow(val_nodes, val_targets) gcnModel = GCN( layer_sizes, generator, bias=True, dropout=dropout, kernel_regularizer=regularizers.l2(5e-4), activations=activations, ) # Expose the input and output sockets of the model: x_inp, x_out = gcnModel.node_model() # Create Keras model for training model = keras.Model(inputs=x_inp, outputs=x_out) model.compile( loss=losses.categorical_crossentropy, metrics=[metrics.categorical_accuracy], optimizer=optimizers.Adam(lr=learning_rate), ) # Train model history = model.fit_generator( train_gen, epochs=num_epochs, validation_data=val_gen, verbose=2, shuffle=False ) return model
def create_GCN_model(graph): generator = FullBatchNodeGenerator(graph) train_gen = generator.flow([1, 2], np.array([[1, 0], [0, 1]])) base_model = GCN( layer_sizes=[8, 2], generator=generator, bias=True, dropout=0.5, activations=["elu", "softmax"], ) x_inp, x_out = base_model.node_model() keras_model = Model(inputs=x_inp, outputs=x_out) return base_model, keras_model, generator, train_gen
def create_GCN_model_sparse(graph): generator = FullBatchNodeGenerator(graph, sparse=True, method="gcn") train_gen = generator.flow([0, 1], np.array([[1, 0], [0, 1]])) layer_sizes = [2, 2] gcn = GCN( layer_sizes=layer_sizes, activations=["elu", "elu"], generator=generator, dropout=0.3, kernel_regularizer=regularizers.l2(5e-4), ) for layer in gcn._layers: layer._initializer = "ones" x_inp, x_out = gcn.node_model() keras_model = Model(inputs=x_inp, outputs=x_out) return gcn, keras_model, generator, train_gen