parser.add_argument("--lr", type=float, default=1e-4) parser.add_argument("--weight_decay", type=float, default=1e-4) parser.add_argument("--epoch", type=int, default=50) parser.add_argument("--dropout_prob", type=float, default=0.3) parser.add_argument("--batch_size", type=int, default=512) parser.add_argument("--num_sample_step", type=int, default=100) arg = parser.parse_args() cora = Cora() A_in = keras.layers.Input((None, )) X_in = keras.layers.Input((cora.g.node_feature_size,)) o = GraphAttention(arg.embed_size)([X_in, A_in]) gat_ = keras.Model(inputs=[X_in, A_in], outputs=o) o = keras.layers.Dropout(arg.dropout_prob)(o) o = GraphAttention(arg.embed_size, attn_heads_reduction="concat")([o, A_in]) o = GraphAttention(cora.g.label_size, attn_heads=1, activation="sigmoid")([o, A_in]) gat = keras.Model(inputs=[X_in, A_in], outputs=o) gat.compile(loss=keras.losses.SparseCategoricalCrossentropy(), optimizer=tfa.optimizers.AdamW(learning_rate=arg.lr, weight_decay=arg.weight_decay), metrics=[keras.metrics.SparseCategoricalAccuracy()]) A = cora.g.adj.toarray() X = cora.g.node_feature sample = RandomSubGraph(cora.g, arg.batch_size, arg.num_sample_step) data = sample.supervised_feature() gat.fit(data, epochs=arg.epoch, shuffle=False) embedding_matrix = gat_([X, A]) embed_visual(embedding_matrix, cora.g.node_label, filename="./results/img/cora_gat.png")
graphsage_ = keras.Model(inputs=[X_in, A_in], outputs=o) o = keras.layers.Dropout(arg.dropout_prob)(o) o = GraphSageConv(arg.embed_size)([o, A_in]) o = GraphSageConv(cora.g.label_size, activation="sigmoid")([o, A_in]) supervised_graphsage = keras.Model(inputs=[X_in, A_in], outputs=o) supervised_graphsage.compile(loss=keras.losses.SparseCategoricalCrossentropy(), optimizer=tfa.optimizers.AdamW(learning_rate=arg.lr, weight_decay=arg.weight_decay), metrics=[keras.metrics.SparseCategoricalAccuracy()]) A = cora.g.adj.toarray() X = cora.g.node_feature sample = RandomSubGraph(cora.g, arg.batch_size, arg.num_sample_step) data = sample.supervised_feature() supervised_graphsage.fit(data, epochs=arg.epoch, shuffle=False) embedding_matrix = graphsage_([X, A]) embed_visual(embedding_matrix, cora.g.node_label, filename="./results/img/cora_graphsage_supervised.png") # unsupervised A_in = keras.layers.Input((None, ), batch_size=arg.batch_size) X_in = keras.layers.Input((cora.g.node_feature_size,), batch_size=arg.batch_size) labels = keras.layers.Input((), batch_size=arg.batch_size) o = GraphSageConv(arg.embed_size)([X_in, A_in]) o = keras.layers.Dropout(arg.dropout_prob)(o) o = GraphSageConv(arg.embed_size)([o, A_in]) o = GraphSageConv(arg.embed_size)([o, A_in]) train_o = SampleSoftmaxLoss(node_size=cora.g.node_size)([labels, o]) unsupervised_graphsage = keras.Model(inputs=[X_in, A_in], outputs=o) unsupervised_graphsage_train = keras.Model(inputs=[X_in, A_in, labels], outputs=train_o) unsupervised_graphsage_train.compile(optimizer=tfa.optimizers.AdamW(learning_rate=arg.lr, weight_decay=arg.weight_decay)) A = cora.g.adj.toarray()
if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--embed_size", type=int, default=128) parser.add_argument("--lr", type=float, default=1e-4) parser.add_argument("--weight_decay", type=float, default=1e-4) parser.add_argument("--epoch_size", type=int, default=500) parser.add_argument("--batch_size", type=int, default=512) arg = parser.parse_args() gpus = tf.config.experimental.list_physical_devices('GPU') if gpus: try: for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) except RuntimeError as e: print(e) cora = Cora() batch = cora.g.edge_array[:, 0] label = cora.g.edge_array[:, 1] model = LINE(cora.g.node_size, arg.embed_size, order=2) model.compile(optimizer=tfa.optimizers.AdamW( learning_rate=arg.lr, weight_decay=arg.weight_decay)) model.fit((batch, label), batch_size=arg.batch_size, epochs=arg.epoch_size) embedding_matrix = model(cora.g.node_array) embed_visual(embedding_matrix, label_array=cora.g.get_nodes_label(), filename="./results/img/cora_line.png")
arg = parser.parse_args() gpus = tf.config.experimental.list_physical_devices('GPU') if gpus: try: for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) except RuntimeError as e: print(e) cora = Cora() def gen(): for batch_num in range(cora.g.node_size // arg.batch_size): start_index = batch_num * arg.batch_size end_index = (batch_num + 1) * arg.batch_size adj_batch_train = cora.g.adj_csr[start_index:end_index, :].toarray().astype(np.float32) adj_mat_train = adj_batch_train[:, start_index:end_index] b_mat_train = np.ones_like(adj_batch_train).astype(np.float32) b_mat_train[adj_batch_train != 0] = arg.beta yield (adj_batch_train, adj_mat_train, b_mat_train), data = tf.data.Dataset.from_generator(gen, output_signature=((tf.TensorSpec(shape=[arg.batch_size, cora.g.node_size], dtype=tf.float32), tf.TensorSpec(shape=[arg.batch_size, arg.batch_size], dtype=tf.float32), tf.TensorSpec(shape=[arg.batch_size, cora.g.node_size], dtype=tf.float32)),)) data = data.prefetch(tf.data.experimental.AUTOTUNE) model = SDNE(cora.g.node_size, arg.embed_size, alpha=arg.alpha) model.compile(optimizer=tfa.optimizers.AdamW(learning_rate=arg.lr, weight_decay=arg.weight_decay)) model.fit(data, epochs=arg.epoch_size) embedding_matrix = model(cora.g.adj.toarray()) embed_visual(embedding_matrix, cora.g.get_nodes_label(), filename="./results/img/cora_sdne.png")
{"units": arg.embed_size}))(adjs, initial_state=nodes_embed) cls_o = keras.layers.Dense(book.g.label_size, activation="sigmoid")(o) supervised_gcrn_ = keras.Model(inputs=(nodes, adjs), outputs=o) supervised_gcrn = keras.Model(inputs=[nodes, adjs], outputs=cls_o) supervised_gcrn.compile(loss=keras.losses.SparseCategoricalCrossentropy(), optimizer=tfa.optimizers.AdamW( learning_rate=arg.lr, weight_decay=arg.weight_decay), metrics=[keras.metrics.SparseCategoricalAccuracy()]) supervised_gcrn.fit(data, epochs=arg.epoch_size, shuffle=False) dis_array = np.stack([adj.toarray() for adj in book.g.discrete_adj_list], axis=1) embedding_matrix = supervised_gcrn_([book.g.node_array, dis_array]) embed_visual(embedding_matrix, book.g.node_label, filename="./results/img/book_gcrn_supervised.png") # unsupervised data = sample.unsupervised() nodes = keras.layers.Input(shape=(), batch_size=arg.batch_size) adjs = keras.layers.Input(shape=(None, None), batch_size=arg.batch_size) labels = keras.layers.Input((), batch_size=arg.batch_size) nodes_embed = keras.layers.Embedding(input_dim=book.g.node_size, output_dim=arg.embed_size)(nodes) o = keras.layers.RNN( GCRN2Cell(arg.embed_size, GraphAttention, {"units": arg.embed_size}))(adjs, initial_state=nodes_embed) o = keras.layers.Dense(book.g.label_size, activation="sigmoid")(o) train_o = SampleSoftmaxLoss(node_size=book.g.node_size)([labels, o])