Diff of /Models/main-ResGCN.py [000000] .. [259458]

Switch to side-by-side view

--- a
+++ b/Models/main-ResGCN.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Import useful packages
+from __future__ import absolute_import
+from __future__ import print_function
+from __future__ import division
+
+# Hide the Configuration and Warnings
+import os
+os.environ["TF_CPP_MIN_LOG_LEVEL"] = '3'
+
+import tensorflow as tf
+import numpy as np
+import pandas as pd
+from scipy import sparse
+from Models.Network.lib_for_GCN import ResGCN_Model, graph, coarsening
+from Models.DatasetAPI.DataLoader import DatasetLoader
+
+# Model Name
+Model = 'Residual_Graph_Convolutional_Neural_Network'
+
+# Clear all the stack and use GPU resources as much as possible
+tf.reset_default_graph()
+config = tf.ConfigProto()
+config.gpu_options.allow_growth = True
+sess = tf.Session(config=config)
+
+# Your Dataset Location, for example EEG-Motor-Movement-Imagery-Dataset
+# The CSV file should be named as training_set.csv, training_label.csv, test_set.csv, and test_label.csv
+DIR = 'DatasetAPI/EEG-Motor-Movement-Imagery-Dataset/'
+SAVE = 'Saved_Files/' + Model + '/'
+if not os.path.exists(SAVE):  # If the SAVE folder doesn't exist, create one
+    os.mkdir(SAVE)
+
+# Load the dataset, here it uses one-hot representation for labels
+train_data, train_labels, test_data, test_labels = DatasetLoader(DIR=DIR)
+
+# Read the Adjacency matrix
+Adjacency_Matrix = pd.read_csv(DIR + 'Adjacency_Matrix.csv', header=None)
+Adjacency_Matrix = np.array(Adjacency_Matrix).astype('float32')
+Adjacency_Matrix = sparse.csr_matrix(Adjacency_Matrix)
+
+# This is the coarsen levels, you can definitely change the level to observe the difference
+graphs, perm = coarsening.coarsen(Adjacency_Matrix, levels=5, self_connections=False)
+X_train = coarsening.perm_data(train_data, perm)
+X_test  = coarsening.perm_data(test_data,  perm)
+
+# Obtain the Graph Laplacian
+L = [graph.laplacian(Adjacency_Matrix, normalized=True) for Adjacency_Matrix in graphs]
+
+# Hyper-parameters
+params = dict()
+params['dir_name']       = Model
+params['num_epochs']     = 50
+params['batch_size']     = 1024
+params['eval_frequency'] = 100
+
+# Building blocks.
+params['filter'] = 'chebyshev5'
+params['brelu']  = 'b2relu'
+params['pool']   = 'mpool1'
+
+# Architecture.
+params['F'] = [16, 16, 16, 32, 32, 32, 64, 64, 64, 128, 128, 128, 256, 256, 256, 512, 512, 512]    # Number of graph convolutional filters.
+params['K'] = [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]                               # Polynomial orders.
+params['p'] = [1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2]                               # Pooling sizes.
+params['M'] = [4]                                                                                  # Output dimensionality of fully connected layers.
+
+# Optimization.
+params['regularization'] = 0.001  # L2 regularization
+params['dropout']        = 0.50   # Dropout rate
+params['learning_rate']  = 0.001  # Learning rate
+params['decay_rate']     = 1      # Learning rate Decay == 1 means no Decay
+params['momentum']       = 0      # momentum == 0 means Use Adam Optimizer
+params['decay_steps']    = np.shape(train_data)[0] / params['batch_size']
+
+# Train model
+model = ResGCN_Model.cgcnn(L, **params)
+accuracy, loss, t_step = model.fit(X_train, train_labels, X_test, test_labels)