From ff80f7ebaf884f0d1284d8840176f283ff410490 Mon Sep 17 00:00:00 2001
From: Hashim Sharif <hsharif3@miranda.cs.illinois.edu>
Date: Fri, 19 Mar 2021 21:55:48 -0500
Subject: [PATCH] Removing Keras sources from Frontend location

---
 hpvm/projects/keras/src/Benchmark.py         | 158 ------
 hpvm/projects/keras/src/Config.py            |  13 -
 hpvm/projects/keras/src/alexnet.py           | 159 ------
 hpvm/projects/keras/src/alexnet2.py          | 147 -----
 hpvm/projects/keras/src/alexnet_imagenet.py  | 107 ----
 hpvm/projects/keras/src/lenet.py             | 115 ----
 hpvm/projects/keras/src/mobilenet_cifar10.py | 194 -------
 hpvm/projects/keras/src/resnet18_cifar10.py  | 566 -------------------
 hpvm/projects/keras/src/resnet50_imagenet.py | 155 -----
 hpvm/projects/keras/src/vgg16_cifar10.py     | 197 -------
 hpvm/projects/keras/src/vgg16_cifar100.py    | 211 -------
 hpvm/projects/keras/src/vgg16_imagenet.py    | 140 -----
 12 files changed, 2162 deletions(-)
 delete mode 100644 hpvm/projects/keras/src/Benchmark.py
 delete mode 100644 hpvm/projects/keras/src/Config.py
 delete mode 100644 hpvm/projects/keras/src/alexnet.py
 delete mode 100644 hpvm/projects/keras/src/alexnet2.py
 delete mode 100644 hpvm/projects/keras/src/alexnet_imagenet.py
 delete mode 100644 hpvm/projects/keras/src/lenet.py
 delete mode 100644 hpvm/projects/keras/src/mobilenet_cifar10.py
 delete mode 100644 hpvm/projects/keras/src/resnet18_cifar10.py
 delete mode 100644 hpvm/projects/keras/src/resnet50_imagenet.py
 delete mode 100644 hpvm/projects/keras/src/vgg16_cifar10.py
 delete mode 100644 hpvm/projects/keras/src/vgg16_cifar100.py
 delete mode 100644 hpvm/projects/keras/src/vgg16_imagenet.py

diff --git a/hpvm/projects/keras/src/Benchmark.py b/hpvm/projects/keras/src/Benchmark.py
deleted file mode 100644
index b0df9d98d6..0000000000
--- a/hpvm/projects/keras/src/Benchmark.py
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-import sys
-import os
-import shutil
-import subprocess
-from keras.utils.np_utils import to_categorical
-from keras.models import load_model
-from keras_frontend.approxhpvm_translator import translate_to_approxhpvm
-from keras_frontend.weight_utils import dumpCalibrationData
-from keras_frontend.weight_utils import reloadHPVMWeights
-
-
-# Every CNN Benchmark must inherit from Benchmark class
-# Defines common interfaces and virtual methods to be overridden by child classes
-class Benchmark:
-
-    def __init__(self, name, reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size=500):
-        self.name = name
-        self.reload_dir = reload_dir
-        self.keras_model_file = keras_model_file
-        self.data_dir = data_dir
-        self.src_dir = src_dir
-        self.num_classes = num_classes
-        self.batch_size = batch_size
-        
-        
-    def buildModel(self):
-        return
-
-    def data_preprocess(self):
-        return
-    
-    def trainModel(self, X_train, y_train, X_test, y_test):
-        return
-
-    def inference(self):
-        return
-
-
-    # Compiles frontend generated sources
-    def compileSource(self, working_dir, src_name, binary_name):
-              
-        src_file = os.getcwd() + "/" + working_dir + "/" + src_name   #  approxhpvm_src.cc"
-        target_binary = os.getcwd() + "/" + working_dir + "/" + binary_name    # HPVM_binary"
-        approx_conf_file = "tuner_confs.txt"
-
-        FNULL = open(os.devnull, 'w')
-        
-        try:
-            subprocess.run([
-                "approxhpvm.py", 
-                "-h"
-            ], check=True, stdout=FNULL)
-            
-        except:
-            print ("\n\n ERROR: Could not find approxhpvm.py (HPVM compile script)!! \n\n")
-            print ("To Compile, Must set PATH to include approxhpvm.py script. Do the following: ")
-            print ("**** export PATH=${PATH_TO_YOUR_HPVM_INSTALLATION}/build/bin/:$PATH *****")
-            sys.exit(1)
-
-
-        try:
-            subprocess.run([
-                "approxhpvm.py", src_file, target_binary,
-                "-t", "tensor", "--conf-file", approx_conf_file
-            ], check=True)
-        except:
-            print ("\n\n ERROR: HPVM Compilation Failed!! \n\n")
-            sys.exit(1)
-
-        f = open("working_dir.txt", "w+")
-        f.write(working_dir)
-        f.close()
-       
-            
-        
-    def printUsage(self):
-
-        print ("Usage: python ${benchmark.py} [hpvm_reload|train] [frontend] [compile]")
-        sys.exit(0)
-
-        
-    def run(self, argv):
-
-      if len(argv) < 2:
-          self.printUsage()
-          
-      print ("Build Model ...")
-      # Virtual method call implemented by each CNN
-      model = self.buildModel()
-
-      print ("Data Preprocess... \n")
-      # Virtual method call to preprocess test and train data 
-      X_train, y_train, X_test, y_test, X_tuner, y_tuner = self.data_preprocess()   
-
-      if argv[1] == "hpvm_reload":
-        print ("loading weights .....\n\n")  
-        model = reloadHPVMWeights(model, self.reload_dir, self.keras_model_file)
-
-      elif argv[1] == "keras_reload":
-        model.load_weights(self.keras_model_file)
-        model.compile(loss='categorical_crossentropy',
-                    optimizer='adam',
-                    metrics=['accuracy'])   
-
-      elif argv[1] == "train":
-        print ("Train Model ...")
-        model = self.trainModel(model, X_train, y_train, X_test, y_test)
-      else:
-          self.printUsage()
-
-          
-      score = model.evaluate(X_test, to_categorical(y_test, self.num_classes), verbose=0)
-      print('Test accuracy2:', score[1])
-
-      f = open("final_accuracy", "w+")
-      f.write(str(score[1] * 100))
-      f.close()
-
-
-      if len(argv) > 2:
-        if argv[2] == "frontend":
-
-          if argv[1] == "hpvm_reload": # If reloading HPVM weights use this as directory to load from in HPVM-C generated src
-              self.data_dir = self.reload_dir
-          
-          # Main call to ApproxHPVM-Keras Frontend
-          working_dir = translate_to_approxhpvm(model,
-                                                self.data_dir, self.src_dir,   
-                                                X_test, y_test,
-                                                X_tuner, y_tuner,
-                                                self.batch_size, # FIXIT
-                                                self.num_classes,
-                                                (argv[1] == "hpvm_reload")) # Do not redump HPVM weights if `hpvm_reload` used
-
-          if len(argv) > 3 and argv[3] == "compile":
-            self.compileSource(working_dir, "approxhpvm_src.cc", "HPVM_binary")
-          else:
-            self.printUsage()
-
-          if len(argv) > 4 and argv[4] == "compile_tuner":
-            self.compileSource(working_dir, "approxhpvm_tuner_src.cc", "HPVM_tuner_binary")
-          else:
-            self.printUsage()
-
-
-        if argv[2] == "keras_dump":
-          model.save_weights(self.keras_model_file)
-
-          
-      #elif len(argv) > 2:
-      #  self.printUsage()
-            
-
-    
-
-        
diff --git a/hpvm/projects/keras/src/Config.py b/hpvm/projects/keras/src/Config.py
deleted file mode 100644
index 99e696d632..0000000000
--- a/hpvm/projects/keras/src/Config.py
+++ /dev/null
@@ -1,13 +0,0 @@
-
-import pathlib
-
-
-# Path Relative to Model Params Directory
-abs_path = pathlib.Path(__file__).parent.absolute()
-MODEL_PARAMS_DIR = str(abs_path) + "/../../../../hpvm/test/dnn_benchmarks/model_params/"
-
-
-if __name__ == "__main__":
-
-    abs_path = pathlib.Path(__file__).parent.absolute()
-    print (abs_path)
diff --git a/hpvm/projects/keras/src/alexnet.py b/hpvm/projects/keras/src/alexnet.py
deleted file mode 100644
index 0eefe1b3d3..0000000000
--- a/hpvm/projects/keras/src/alexnet.py
+++ /dev/null
@@ -1,159 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from keras.datasets import cifar10
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-# Inherits from Benchmark class defined in src/Benchmark.py
-class AlexNet_CIFAR10(Benchmark):
-
-    # buildModel overrides the buildModel declared in src/Benchmark.py
-    # Goal: Build a Keras Sequential Model (other model types not supported) and return the (uninitalized/untrained) Model 
-    def buildModel(self):
-
-        activation_type = 'tanh'
-        weight_decay = 1e-4
-
-        model = Sequential()
-        
-        model.add(Conv2D(64, (11, 11), padding='same', activation=activation_type,
-                         kernel_regularizer=regularizers.l2(weight_decay), input_shape=(3, 32, 32)))
-        model.add(MaxPooling2D(2, 2))
-        model.add(Dropout(0.2))
-        
-        model.add(Conv2D(192, (5, 5), padding='same', activation=activation_type,
-                         kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(MaxPooling2D(2, 2))
-        model.add(Dropout(0.3))
-
-        model.add(Conv2D(384, (3, 3), padding='same', activation=activation_type, 
-                       kernel_regularizer=regularizers.l2(weight_decay)))   
-        model.add(Conv2D(256, (3, 3), padding='same', activation=activation_type, 
-                       kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Conv2D(256, (3, 3), padding='same', activation=activation_type, 
-                       kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(MaxPooling2D(2, 2))
-        model.add(Dropout(0.4))
-
-        model.add(Flatten())
-        model.add(Dense(self.num_classes))
-        model.add(Activation('softmax'))
-        
-        return model
-
-
-    # This routine is called from the common `run` method in src/Benchmark.py
-    # Goal: Return Training and Testing data after preprocessing/normalization
-    def data_preprocess(self):
-
-        (X_train, y_train), (X_val, y_val) = cifar10.load_data()
-
-        X_train = X_train / 255.0
- 
-        mean = np.mean(X_train)
-        std = np.std(X_train)
-        X_train = (X_train - mean) / (std + 1e-7)
-
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/alexnet_cifar10/test_input.bin', dtype=np.float32)
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/alexnet_cifar10/test_labels.bin', dtype=np.uint32)
-
-        X_test = X_test.reshape((-1,3,32,32))
-
-
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/alexnet_cifar10/tune_input.bin', dtype=np.float32)
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/alexnet_cifar10/tune_labels.bin', dtype=np.uint32)
-
-        X_tuner = X_tuner.reshape((-1,3,32,32))
-
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-
-
-    # Goal: Given a Keras Sequential Model - setup the training parameters, train, and return the trained Model
-    def trainModel(self, model, X_train, y_train, X_test, y_test):
-
-        y_train = to_categorical(y_train, self.num_classes)
-        y_test = to_categorical(y_test, self.num_classes)
-
-        model.compile(
-            loss='categorical_crossentropy',
-            optimizer=Adam(lr=0.0001, decay=1e-6),
-            metrics=['accuracy']
-        )
-
-        datagen = ImageDataGenerator(
-            rotation_range=15,
-            width_shift_range=0.1,
-            height_shift_range=0.1,
-            horizontal_flip=True,
-        )
-        datagen.fit(X_train)
-
-
-        def lr_schedule(epoch):
-            lrate = 0.001
-            if epoch > 20:
-                lrate = 0.0005
-            if epoch > 40:
-                lrate = 0.0003
-            if epoch > 60:
-                lrate = 0.0001
-            if epoch > 80:
-                lrate = 0.00005  
-            return lrate
-
-        model.fit(
-            X_train,
-            y_train,
-            batch_size=128,
-            shuffle=True,
-            epochs=100,
-            validation_data=(X_test, y_test), 
-            callbacks=[LearningRateScheduler(lr_schedule)]
-        )
-
-        return model
-
-
-    
-if __name__ == '__main__':
-
-    # Using GPU ID 0 - Change to use different GPU
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format - HPVM currently supports NCHW - NHWC format is not supported
-    K.set_image_data_format('channels_first')
-
-
-    # *** Below are Parameters specific to each benchmark *****
-    reload_dir = MODEL_PARAMS_DIR + '/alexnet_cifar10/'
-    ## Either the HPVM weights are loaded (above) or the Keras Model from the path below 
-    keras_model_file = MODEL_PARAMS_DIR + '/alexnet_cifar10/weights.h5'
-    data_dir = ''   # if reloading weights, data_dir can be set to empty string (value is ignored)
- 
-    src_dir = 'data/alexnet_cifar10_src/'  # Directory where HPVM sources are downloaded
-    num_classes = 10  # Specify num out output classes - CIFAR10 has `10` classes
-    batch_size = 500  # Batch Size set to 500 - Adjust this value based on your GPU memory 
-
-    # All Classes inherit from 'Benchmark` class in src/Benchmark.py and have a common Constructor
-    model = AlexNet_CIFAR10('AlexNet_CIFAR10', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-
-    # This invokes the common run function in src/Benchmark.py 
-    model.run(sys.argv)
-
-    
diff --git a/hpvm/projects/keras/src/alexnet2.py b/hpvm/projects/keras/src/alexnet2.py
deleted file mode 100644
index d2c7d566bb..0000000000
--- a/hpvm/projects/keras/src/alexnet2.py
+++ /dev/null
@@ -1,147 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from keras.datasets import cifar10
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-class AlexNet2_CIFAR10(Benchmark):
-
-    def buildModel(self):
-
-        weight_decay = 1e-4  
-        activation_type = 'tanh'
-
-        model = Sequential()
-        model.add(Conv2D(32, (3, 3), padding='same', kernel_regularizer=regularizers.l2(weight_decay), input_shape=(3, 32, 32)))
-        model.add(Activation(activation_type))
-        model.add(Conv2D(32, (3, 3), padding='same', kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation(activation_type))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-        model.add(Dropout(0.2))
-
-        model.add(Conv2D(64, (3, 3), padding='same', kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation(activation_type))
-        model.add(Conv2D(64, (3, 3), padding='same', kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation(activation_type))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-        model.add(Dropout(0.3))
-
-        model.add(Conv2D(128, (3, 3), padding='same', kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation(activation_type))
-        model.add(Conv2D(128, (3, 3), padding='same', kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation(activation_type))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-        model.add(Dropout(0.4))
-
-        model.add(Flatten())
-        model.add(Dense(self.num_classes))
-        model.add(Activation('softmax'))
-
-        return model
-
-    
-    def data_preprocess(self):
-
-        (X_train, y_train), (X_val, y_val) = cifar10.load_data()
-
-        X_train = X_train / 255.0
-
-        mean = np.mean(X_train)
-        std = np.std(X_train)
-        X_train = (X_train - mean) / (std + 1e-7)
-
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/alexnet2_cifar10/test_input.bin', dtype=np.float32)
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/alexnet2_cifar10/test_labels.bin', dtype=np.uint32)
-
-        X_test = X_test.reshape((-1,3,32,32))
-
-
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/alexnet2_cifar10/tune_input.bin', dtype=np.float32)
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/alexnet2_cifar10/tune_labels.bin', dtype=np.uint32)
-
-        X_tuner = X_tuner.reshape((-1,3,32,32))
-
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-
-
-    def trainModel(self, model, X_train, y_train, X_test, y_test):
-
-        y_train = to_categorical(y_train, self.num_classes)
-        y_test = to_categorical(y_test, self.num_classes)
-
-        model.compile(
-            loss='categorical_crossentropy',
-            optimizer=Adam(lr=0.0001),
-            metrics=['accuracy']
-        )
-
-        datagen = ImageDataGenerator(
-            rotation_range=15,
-            width_shift_range=0.1,
-            height_shift_range=0.1,
-            horizontal_flip=True,
-        )
-        datagen.fit(X_train)
-
-
-        def lr_schedule(epoch):
-            lrate = 0.001
-            if epoch > 20:
-                lrate = 0.0005
-            if epoch > 40:
-                lrate = 0.0003
-            if epoch > 60:
-                lrate = 0.0001
-            return lrate
-
-        model.fit(
-            X_train,
-            y_train,
-            batch_size=128,
-            shuffle=True,
-            epochs=100,
-            validation_data=(X_test, y_test), 
-            callbacks=[LearningRateScheduler(lr_schedule)]
-        )
-
-        return model
-
-
-    
-if __name__ == '__main__':
-
-      
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/alexnet2_cifar10/'
-    keras_model_file = MODEL_PARAMS_DIR + '/alexnet2_cifar10/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/alexnet2_cifar10_src/'
-    num_classes = 10
-    batch_size = 500
-
-    model = AlexNet2_CIFAR10('AlexNet2_CIFAR10', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    model.run(sys.argv)
diff --git a/hpvm/projects/keras/src/alexnet_imagenet.py b/hpvm/projects/keras/src/alexnet_imagenet.py
deleted file mode 100644
index 1cfe7a79c2..0000000000
--- a/hpvm/projects/keras/src/alexnet_imagenet.py
+++ /dev/null
@@ -1,107 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-class AlexNet(Benchmark):
-
-    def data_preprocess(self):
-        X_train, y_train = None, None
-        
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/alexnet_imagenet/test_input.bin', dtype=np.float32)
-        X_test = X_test.reshape((-1, 3, 224, 224)) 
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/alexnet_imagenet/test_labels.bin', dtype=np.uint32)
-        
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/alexnet_imagenet/tune_input.bin', dtype=np.float32)
-        X_tuner = X_tuner.reshape((-1, 3, 224, 224)) 
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/alexnet_imagenet/tune_labels.bin', dtype=np.uint32)
- 
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-    
-    
-    def buildModel(self):
-
-        input_layer = Input((3, 224, 224))
-
-        x = ZeroPadding2D((2, 2))(input_layer)
-        x = Conv2D(64, (11, 11), strides=4, padding='valid')(x)
-        x = Activation('relu')(x)
-        x = MaxPooling2D(3, 2)(x)
-
-        x = ZeroPadding2D((2, 2))(x)
-        x = Conv2D(192, (5, 5), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = MaxPooling2D(3, 2)(x)
-
-        x = Conv2D(384, (3, 3), padding='same')(x)
-        x = Activation('relu')(x)
-
-        x = Conv2D(256, (3, 3), padding='same')(x)
-        x = Activation('relu')(x)
-
-        x = Conv2D(256, (3, 3), padding='same')(x)
-        x = Activation('relu')(x)
-
-        x = MaxPooling2D(3, 2)(x)
-
-        x = Flatten()(x)
-        x = Dropout(0.5)(x)
-        x = Dense(4096)(x)
-        x = Activation('relu')(x)
-        x = Dropout(0.5)(x)
-        x = Dense(4096)(x) 
-        x = Activation('relu')(x)
-        x = Dense(self.num_classes)(x)
-        x = Activation('softmax')(x)
-        
-        model = Model(input_layer, x)
-
-        return model
-
-
-    def trainModel(self, model, X_train, y_train, X_test, y_test):
-
-        assert False, "ImageNet training not supported - use Pretrained weights"
-
-
-    
-if __name__ == '__main__':
-
-      
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/alexnet_imagenet/'
-    keras_model_file = MODEL_PARAMS_DIR + '/alexnet_imagenet/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/alexnet_imagenet_src/'
-    num_classes = 1000
-    batch_size = 50
-
-    model = AlexNet('AlexNet_Imagenet', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    model.run(sys.argv)
-
-
-    
diff --git a/hpvm/projects/keras/src/lenet.py b/hpvm/projects/keras/src/lenet.py
deleted file mode 100644
index 70dd73a66a..0000000000
--- a/hpvm/projects/keras/src/lenet.py
+++ /dev/null
@@ -1,115 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from keras.datasets import mnist
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-class LeNet_MNIST(Benchmark):
-
-    def buildModel(self):
-
-        # Network Compostion: 2 Conv Layers, 2 Dense Layers
-        model = Sequential()
-
-        # ConvLayer1
-        model.add(Conv2D(32, kernel_size=(5, 5), padding='same', activation='tanh', input_shape=(1, 28, 28)))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-        # ConvLayer2
-        model.add(Conv2D(64, (5, 5), activation='tanh', padding='same'))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-        model.add(Flatten())
-        
-        # DenseLayer1
-        model.add(Dense(1024, activation='tanh'))
-        # DenseLayer2
-        
-        model.add(Dense(self.num_classes, activation='tanh'))
-        # Softmax Layer
-        model.add(Activation('softmax'))
-
-        return model
-
-
-    def data_preprocess(self):
-        (X_train, y_train), (X_val, y_val) = mnist.load_data()
-        test_labels = y_val
-
-        X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)
-        X_train = X_train.astype('float32')
-        X_train /= 255
-
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/lenet_mnist/test_input.bin', dtype=np.float32)
-        X_test = X_test.reshape((-1, 1, 28, 28)) 
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/lenet_mnist/test_labels.bin', dtype=np.uint32)
-        
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/lenet_mnist/tune_input.bin', dtype=np.float32)
-        X_tuner = X_tuner.reshape((-1, 1, 28, 28)) 
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/lenet_mnist/tune_labels.bin', dtype=np.uint32)
-
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-    
-
-    def trainModel(self, model, X_train, y_train, X_test, y_test):
-
-        y_train = to_categorical(y_train, self.num_classes)
-        y_test = to_categorical(y_test, self.num_classes)
-        
-        model.compile(
-            loss='categorical_crossentropy',
-            optimizer=keras.optimizers.Adadelta(),
-            metrics=['accuracy']
-        )
-
-        model.fit(
-            X_train, 
-            y_train,
-            batch_size=128,
-            epochs=10,
-            verbose=1,
-            validation_data=(X_test, y_test)
-        )
-        
-        return model
-  
-
-    
-if __name__ == '__main__':
-      
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/lenet_mnist/'
-    keras_model_file = MODEL_PARAMS_DIR + '/lenet_mnist/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/lenet_mnist_src/'
-    num_classes = 10
-    batch_size = 500
-    
-    print (reload_dir)
-
-    model = LeNet_MNIST('LeNet_MNIST', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    model.run(sys.argv)
diff --git a/hpvm/projects/keras/src/mobilenet_cifar10.py b/hpvm/projects/keras/src/mobilenet_cifar10.py
deleted file mode 100644
index 34335b0f1a..0000000000
--- a/hpvm/projects/keras/src/mobilenet_cifar10.py
+++ /dev/null
@@ -1,194 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from keras.datasets import cifar10
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-class MobileNet_CIFAR10(Benchmark):
-
-    def buildModel(self):
-        alpha=1
-        depth_multiplier=1
-
-        model = Sequential()
-
-        def _conv_block(filters, alpha, kernel=(3, 3), strides=(1, 1)):
-            channel_axis = 1
-
-            model.add(Conv2D(filters, kernel,
-                              padding='same',
-                              use_bias=False,
-                              strides=strides, 
-                              input_shape=(3, 32, 32)))
-            model.add(BatchNormalization(axis=channel_axis))
-            model.add(Activation('relu'))
-
-        def _depthwise_conv_block(pointwise_conv_filters, alpha, depth_multiplier=1, strides=(1, 1)):
-            channel_axis = 1 
-
-            model.add(ZeroPadding2D(padding=((1,1), (1,1))))
-
-            model.add(DepthwiseConv2D((3, 3),
-                                       padding='valid',
-                                       #depth_multiplier=depth_multiplier,
-                                       strides=strides,
-                                       use_bias=False))    
-            model.add(BatchNormalization(axis=channel_axis))
-
-            model.add(Activation('relu'))
-            model.add(Conv2D(pointwise_conv_filters, (1, 1),
-                              padding='same',
-                              use_bias=False,
-                              strides=(1, 1)))
-            model.add(BatchNormalization(axis=channel_axis))
-            model.add(Activation('relu'))
-
-
-        _conv_block(32, alpha, strides=(1, 1))
-
-        _depthwise_conv_block(64, alpha, depth_multiplier)
-
-        _depthwise_conv_block(128, alpha, depth_multiplier,
-                                  strides=(2, 2))
-        _depthwise_conv_block(128, alpha, depth_multiplier)
-        model.add(Dropout(rate=0.5))
-
-        _depthwise_conv_block(256, alpha, depth_multiplier, 
-                          strides=(2, 2))
-        _depthwise_conv_block(256, alpha, depth_multiplier)
-        model.add(Dropout(rate=0.5))
-
-        _depthwise_conv_block(512, alpha, depth_multiplier,
-                          strides=(2, 2))
-        _depthwise_conv_block(512, alpha, depth_multiplier)
-        _depthwise_conv_block(512, alpha, depth_multiplier)
-        model.add(Dropout(rate=0.5))
-
-        _depthwise_conv_block(512, alpha, depth_multiplier)
-        _depthwise_conv_block(512, alpha, depth_multiplier)
-        _depthwise_conv_block(512, alpha, depth_multiplier)
-        model.add(Dropout(rate=0.5))
-
-        _depthwise_conv_block(1024, alpha, depth_multiplier,
-                             strides=(2, 2))
-        _depthwise_conv_block(1024, alpha, depth_multiplier)
-        model.add(Dropout(rate=0.5))
-
-        model.add(AveragePooling2D(pool_size=2))
-        model.add(Flatten())
-        model.add(Dense(self.num_classes))    
-        model.add(Activation('softmax'))
-
-        return model
-
-    
-    def data_preprocess(self):
-
-        (X_train, y_train), (X_val, y_val) = cifar10.load_data()
-
-        X_train = X_train / 255.0
-        #X_val = X_val / 255.0
-
-        mean = np.mean(X_train)
-        std = np.std(X_train)
-        X_train = (X_train - mean) / (std + 1e-7)
-        #X_val = (X_val - mean) / (std + 1e-7)
-
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/mobilenet_cifar10/test_input.bin', dtype=np.float32)
-        y_test= np.fromfile(MODEL_PARAMS_DIR + '/mobilenet_cifar10/test_labels.bin', dtype=np.uint32)
-
-        X_test = X_test.reshape((-1,3,32,32))
-
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/mobilenet_cifar10/tune_input.bin', dtype=np.float32)
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/mobilenet_cifar10/tune_labels.bin', dtype=np.uint32)
-
-        X_tuner = X_tuner.reshape((-1,3,32,32))
-
-
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-
-
-    def trainModel(self, model, X_train, y_train, X_test, y_test):
-
-        y_train = to_categorical(y_train, self.num_classes)
-        y_test = to_categorical(y_test, self.num_classes)
-
-        # data augmentation, horizontal flips only
-        datagen = ImageDataGenerator(
-                featurewise_center=False,
-                featurewise_std_normalization=False,
-                rotation_range=0.0,
-                width_shift_range=0.0,
-                height_shift_range=0.0,
-                vertical_flip=False,
-                horizontal_flip=True)
-        datagen.fit(X_train)
-
-
-        learning_rates=[]
-        for i in range(50):
-            learning_rates.append(0.01)
-        for i in range(75-50):
-            learning_rates.append(0.001)
-        for i in range(100-75):
-            learning_rates.append(0.0001)
-        for i in range(125-100):
-            learning_rates.append(0.00001)
-            
-        callbacks = [
-            LearningRateScheduler(lambda epoch: float(learning_rates[epoch]))
-        ]
-
-        model.compile(optimizer=keras.optimizers.SGD(lr=learning_rates[0], momentum=0.9, decay=0.0), 
-                               loss='categorical_crossentropy', 
-                               metrics=['accuracy'])
-
-        model.fit_generator(
-            datagen.flow(X_train, y_train, batch_size=128),
-            steps_per_epoch=int(np.ceil(50000 / 128)),
-            validation_data=(X_test, y_test),
-            epochs=125,
-            callbacks=callbacks
-        )
-
-        return model
-
-  
-    
-if __name__ == '__main__':
-      
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/mobilenet_cifar10/'
-    keras_model_file = MODEL_PARAMS_DIR + '/mobilenet_cifar10/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/mobilenet_cifar10_src/'
-    num_classes = 10
-    batch_size = 500
-
-    model = MobileNet_CIFAR10('MobileNet_CIFAR10', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    model.run(sys.argv)
-
diff --git a/hpvm/projects/keras/src/resnet18_cifar10.py b/hpvm/projects/keras/src/resnet18_cifar10.py
deleted file mode 100644
index 02753f9eac..0000000000
--- a/hpvm/projects/keras/src/resnet18_cifar10.py
+++ /dev/null
@@ -1,566 +0,0 @@
-"""
-#Trains a ResNet on the CIFAR10 dataset.
-
-ResNet v1:
-[Deep Residual Learning for Image Recognition
-](https://arxiv.org/pdf/1512.03385.pdf)
-
-ResNet v2:
-[Identity Mappings in Deep Residual Networks
-](https://arxiv.org/pdf/1603.05027.pdf)
-
-
-Model|n|200-epoch accuracy|Original paper accuracy |sec/epoch GTX1080Ti
-:------------|--:|-------:|-----------------------:|---:
-ResNet20   v1|  3| 92.16 %|                 91.25 %|35
-ResNet32   v1|  5| 92.46 %|                 92.49 %|50
-ResNet44   v1|  7| 92.50 %|                 92.83 %|70
-ResNet56   v1|  9| 92.71 %|                 93.03 %|90
-ResNet110  v1| 18| 92.65 %|            93.39+-.16 %|165
-ResNet164  v1| 27|     - %|                 94.07 %|  -
-ResNet1001 v1|N/A|     - %|                 92.39 %|  -
-
-&nbsp;
-
-Model|n|200-epoch accuracy|Original paper accuracy |sec/epoch GTX1080Ti
-:------------|--:|-------:|-----------------------:|---:
-ResNet20   v2|  2|     - %|                     - %|---
-ResNet32   v2|N/A| NA    %|            NA         %| NA
-ResNet44   v2|N/A| NA    %|            NA         %| NA
-ResNet56   v2|  6| 93.01 %|            NA         %|100
-ResNet110  v2| 12| 93.15 %|            93.63      %|180
-ResNet164  v2| 18|     - %|            94.54      %|  -
-ResNet1001 v2|111|     - %|            95.08+-.14 %|  -
-"""
-
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from keras.datasets import cifar10
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-# Training parameters
-batch_size = 32  # orig paper trained all networks with batch_size=128
-epochs = 200
-
-
-# Model parameter
-# ----------------------------------------------------------------------------
-#           |      | 200-epoch | Orig Paper| 200-epoch | Orig Paper| sec/epoch
-# Model     |  n   | ResNet v1 | ResNet v1 | ResNet v2 | ResNet v2 | GTX1080Ti
-#           |v1(v2)| %Accuracy | %Accuracy | %Accuracy | %Accuracy | v1 (v2)
-# ----------------------------------------------------------------------------
-# ResNet20  | 3 (2)| 92.16     | 91.25     | -----     | -----     | 35 (---)
-# ResNet32  | 5(NA)| 92.46     | 92.49     | NA        | NA        | 50 ( NA)
-# ResNet44  | 7(NA)| 92.50     | 92.83     | NA        | NA        | 70 ( NA)
-# ResNet56  | 9 (6)| 92.71     | 93.03     | 93.01     | NA        | 90 (100)
-# ResNet110 |18(12)| 92.65     | 93.39+-.16| 93.15     | 93.63     | 165(180)
-# ResNet164 |27(18)| -----     | 94.07     | -----     | 94.54     | ---(---)
-# ResNet1001| (111)| -----     | 92.39     | -----     | 95.08+-.14| ---(---)
-# ---------------------------------------------------------------------------
-n = 3
-
-# Model version
-# Orig paper: version = 1 (ResNet v1), Improved ResNet: version = 2 (ResNet v2)
-version = 1
-
-# Computed depth from supplied model parameter n
-if version == 1:
-    depth = n * 6 + 2
-elif version == 2:
-    depth = n * 9 + 2
-
-# Model name, depth and version
-model_type = 'ResNet%dv%d' % (depth, version)
-
-
-    
-def resnet_layer(inputs,
-                 num_filters=16,
-                 kernel_size=3,
-                 strides=1,
-                 activation='relu',
-                 batch_normalization=True,
-                 conv_first=True):
-    """2D Convolution-Batch Normalization-Activation stack builder
-
-    # Arguments
-        inputs (tensor): input tensor from input image or previous layer
-        num_filters (int): Conv2D number of filters
-        kernel_size (int): Conv2D square kernel dimensions
-        strides (int): Conv2D square stride dimensions
-        activation (string): activation name
-        batch_normalization (bool): whether to include batch normalization
-        conv_first (bool): conv-bn-activation (True) or
-            bn-activation-conv (False)
-
-    # Returns
-        x (tensor): tensor as input to the next layer
-    """
-    conv = Conv2D(num_filters,
-                  kernel_size=kernel_size,
-                  strides=strides,
-                  padding='valid', # NOTE: using valid convs with explicit pad operation
-                  kernel_initializer='he_normal',
-                  kernel_regularizer=regularizers.l2(1e-4))
-
-    padding_value = int((kernel_size - 1) / 2)
-    zero_padding = ZeroPadding2D(padding = (padding_value, padding_value))
-
-    # FIXME: Temporarily disabled batch normalization
-    batch_normalization = False
-
-    x = inputs
-    x = zero_padding(x)
-    if conv_first:
-        x = conv(x)
-        if batch_normalization:
-            x = BatchNormalization()(x)
-        if activation is not None:
-            x = Activation(activation)(x)
-    else:
-        if batch_normalization:
-            x = BatchNormalization()(x)
-        if activation is not None:
-            x = Activation(activation)(x)
-        x = conv(x)
-    return x
-
-
-class ResNet18_CIFAR10(Benchmark):
-
-    def lr_schedule(self, epoch):
-        """Learning Rate Schedule
-
-        Learning rate is scheduled to be reduced after 80, 120, 160, 180 epochs.
-        Called automatically every epoch as part of callbacks during training.
-
-        # Arguments
-            epoch (int): The number of epochs
-
-        # Returns
-            lr (float32): learning rate
-        """
-        lr = 1e-3
-        if epoch > 180:
-            lr *= 0.5e-3
-        elif epoch > 160:
-            lr *= 1e-3
-        elif epoch > 120:
-            lr *= 1e-2
-        elif epoch > 80:
-            lr *= 1e-1
-            
-        return lr
-    
-
-    def resnet_v0(self, input_shape, depth, num_classes=10):
-        """ResNet Version 1 Model builder [a]
-
-        Stacks of 2 x (3 x 3) Conv2D-BN-ReLU
-        Last ReLU is after the shortcut connection.
-        At the beginning of each stage, the feature map size is halved (downsampled)
-        by a convolutional layer with strides=2, while the number of filters is
-        doubled. Within each stage, the layers have the same number filters and the
-        same number of filters.
-        Features maps sizes:
-        stage 0: 32x32, 16
-        stage 1: 16x16, 32
-        stage 2:  8x8,  64
-        The Number of parameters is approx the same as Table 6 of [a]:
-        ResNet20 0.27M
-        ResNet32 0.46M
-        ResNet44 0.66M
-        ResNet56 0.85M
-        ResNet110 1.7M
-
-        # Arguments
-            input_shape (tensor): shape of input image tensor
-            depth (int): number of core convolutional layers
-            num_classes (int): number of classes (CIFAR10 has 10)
-
-        # Returns
-            model (Model): Keras model instance
-        """
-        if (depth - 2) % 6 != 0:
-            raise ValueError('depth should be 6n+2 (eg 20, 32, 44 in [a])')
-        # Start model definition.
-        num_filters = 16
-        num_res_blocks = int((depth - 2) / 6)
-
-        inputs = Input(shape=input_shape)
-        x = resnet_layer(inputs=inputs)
-        # Instantiate the stack of residual units
-        for stack in range(3):
-            for res_block in range(num_res_blocks):
-                strides = 1
-                if stack > 0 and res_block == 0:  # first layer but not first stack
-                    strides = 2  # downsample
-                y = resnet_layer(inputs=x,
-                                 num_filters=num_filters,
-                                 strides=strides)
-                y = resnet_layer(inputs=y,
-                                 num_filters=num_filters,
-                                 activation=None)
-                if stack > 0 and res_block == 0:  # first layer but not first stack
-                    # linear projection residual shortcut connection to match
-                    # changed dims
-                    x = resnet_layer(inputs=x,
-                                     num_filters=num_filters,
-                                     kernel_size=1,
-                                     strides=strides,
-                                     activation=None,
-                                     batch_normalization=False)
-                x = keras.layers.add([x, y])
-                x = Activation('relu')(x)
-            num_filters *= 1
-
-        # Add classifier on top.
-        # v1 does not use BN after last shortcut connection-ReLU
-        #-- x = AveragePooling2D(pool_size=8)(x)
-        y = Flatten()(x)
-        x = Dense(64)(y)
-        outputs = Dense(num_classes,
-                        activation='softmax',
-                        kernel_initializer='he_normal')(x)
-
-        # Instantiate model.
-        model = Model(inputs=inputs, outputs=outputs)
-        return model
-
-
-    def resnet_v1_1(self, input_shape, depth, num_classes=10):
-        """ResNet Version 1 Model builder [a]
-
-        Stacks of 2 x (3 x 3) Conv2D-BN-ReLU
-        Last ReLU is after the shortcut connection.
-        At the beginning of each stage, the feature map size is halved (downsampled)
-        by a convolutional layer with strides=2, while the number of filters is
-        doubled. Within each stage, the layers have the same number filters and the
-        same number of filters.
-        Features maps sizes:
-        stage 0: 32x32, 16
-        stage 1: 16x16, 32
-        stage 2:  8x8,  64
-        The Number of parameters is approx the same as Table 6 of [a]:
-        ResNet20 0.27M
-        ResNet32 0.46M
-        ResNet44 0.66M
-        ResNet56 0.85M
-        ResNet110 1.7M
-
-        # Arguments
-            input_shape (tensor): shape of input image tensor
-            depth (int): number of core convolutional layers
-            num_classes (int): number of classes (CIFAR10 has 10)
-
-        # Returns
-            model (Model): Keras model instance
-        """
-        if (depth - 2) % 6 != 0:
-            raise ValueError('depth should be 6n+2 (eg 20, 32, 44 in [a])')
-        # Start model definition.
-        num_filters = 16
-        num_res_blocks = int((depth - 2) / 6)
-
-        inputs = Input(shape=input_shape)
-        x = resnet_layer(inputs=inputs)
-        # Instantiate the stack of residual units
-        for stack in range(3):
-            for res_block in range(num_res_blocks):
-                strides = 1
-                if stack > 0 and res_block == 0:  # first layer but not first stack
-                    strides = 2  # downsample
-                y = resnet_layer(inputs=x,
-                                 num_filters=num_filters,
-                                 strides=strides)
-                y = resnet_layer(inputs=y,
-                                 num_filters=num_filters,
-                                 activation=None)
-                if stack > 0 and res_block == 0:  # first layer but not first stack
-                    # linear projection residual shortcut connection to match
-                    # changed dims
-                    x = resnet_layer(inputs=x,
-                                     num_filters=num_filters,
-                                     kernel_size=1,
-                                     strides=strides,
-                                     activation=None,
-                                     batch_normalization=False)
-                x = keras.layers.add([x, y])
-                x = Activation('relu')(x)
-            num_filters *= 2
-
-
-        x = AveragePooling2D(pool_size=8)(x)
-        y = Flatten()(x)
-        outputs = Dense(num_classes,
-                        #activation='softmax',
-                        kernel_initializer='he_normal')(y)
-
-        outputs = Activation('softmax')(outputs)
-
-
-        # Instantiate model.
-        model = Model(inputs=inputs, outputs=outputs)
-        return model
-
-
-
-    def resnet_v2(self, input_shape, depth, num_classes=10):
-        """ResNet Version 2 Model builder [b]
-
-        Stacks of (1 x 1)-(3 x 3)-(1 x 1) BN-ReLU-Conv2D or also known as
-        bottleneck layer
-        First shortcut connection per layer is 1 x 1 Conv2D.
-        Second and onwards shortcut connection is identity.
-        At the beginning of each stage, the feature map size is halved (downsampled)
-        by a convolutional layer with strides=2, while the number of filter maps is
-        doubled. Within each stage, the layers have the same number filters and the
-        same filter map sizes.
-        Features maps sizes:
-        conv1  : 32x32,  16
-        stage 0: 32x32,  64
-        stage 1: 16x16, 128
-        stage 2:  8x8,  256
-
-        # Arguments
-            input_shape (tensor): shape of input image tensor
-            depth (int): number of core convolutional layers
-            num_classes (int): number of classes (CIFAR10 has 10)
-
-        # Returns
-            model (Model): Keras model instance
-        """
-        if (depth - 2) % 9 != 0:
-            raise ValueError('depth should be 9n+2 (eg 56 or 110 in [b])')
-        # Start model definition.
-        num_filters_in = 16
-        num_res_blocks = int((depth - 2) / 9)
-
-        inputs = Input(shape=input_shape)
-        # v2 performs Conv2D with BN-ReLU on input before splitting into 2 paths
-        x = resnet_layer(inputs=inputs,
-                         num_filters=num_filters_in,
-                         conv_first=True)
-
-        # Instantiate the stack of residual units
-        for stage in range(3):
-            for res_block in range(num_res_blocks):
-                activation = 'relu'
-                batch_normalization = True
-                strides = 1
-                if stage == 0:
-                    num_filters_out = num_filters_in * 4
-                    if res_block == 0:  # first layer and first stage
-                        activation = None
-                        batch_normalization = False
-                else:
-                    num_filters_out = num_filters_in * 2
-                    if res_block == 0:  # first layer but not first stage
-                        strides = 2    # downsample
-
-                # bottleneck residual unit
-                y = resnet_layer(inputs=x,
-                                 num_filters=num_filters_in,
-                                 kernel_size=1,
-                                 strides=strides,
-                                 activation=activation,
-                                 batch_normalization=batch_normalization,
-                                 conv_first=False)
-                y = resnet_layer(inputs=y,
-                                 num_filters=num_filters_in,
-                                 conv_first=False)
-                y = resnet_layer(inputs=y,
-                                 num_filters=num_filters_out,
-                                 kernel_size=1,
-                                 conv_first=False)
-                if res_block == 0:
-                    # linear projection residual shortcut connection to match
-                    # changed dims
-                    x = resnet_layer(inputs=x,
-                                     num_filters=num_filters_out,
-                                     kernel_size=1,
-                                     strides=strides,
-                                     activation=None,
-                                     batch_normalization=False)
-                x = keras.layers.add([x, y])
-
-            num_filters_in = num_filters_out
-
-        # Add classifier on top.
-        # v2 has BN-ReLU before Pooling
-        x = BatchNormalization()(x)
-        x = Activation('relu')(x)
-        x = AveragePooling2D(pool_size=8)(x)
-        y = Flatten()(x)
-        outputs = Dense(num_classes,
-                        activation='softmax',
-                        kernel_initializer='he_normal')(y)
-
-        # Instantiate model.
-        model = Model(inputs=inputs, outputs=outputs)
-        return model
-
-    
-    def buildModel(self):
-
-        depth = 20
-        input_shape = (3, 32, 32)
-        
-        if version == 2:
-            model = self.resnet_v2(input_shape=input_shape, depth=depth)
-        else:
-            model = self.resnet_v1_1(input_shape=input_shape, depth=depth)
-
-        return model
-    
-    
-    def data_preprocess(self):
-
-        (X_train, y_train), (X_val, y_val) = cifar10.load_data()
-
-        X_train = X_train / 255.0
-        mean = np.mean(X_train)
-        std = np.std(X_train)
-        X_train = (X_train - mean)
-
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/resnet18_cifar10/test_input.bin', dtype=np.float32)
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/resnet18_cifar10/test_labels.bin', dtype=np.uint32)
-
-        X_test = X_test.reshape((-1,3,32,32))
-
-
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/resnet18_cifar10/tune_input.bin', dtype=np.float32)
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/resnet18_cifar10/tune_labels.bin', dtype=np.uint32)
-
-        X_tuner = X_tuner.reshape((-1,3,32,32))
-
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-
-
-    def trainModel(self, model, X_train, y_train, X_test, y_test):
-
-        y_train = to_categorical(y_train, self.num_classes)
-        y_test = to_categorical(y_test, self.num_classes)
-
-        model.compile(
-            loss='categorical_crossentropy',
-            optimizer=Adam(lr=self.lr_schedule(0)),
-            metrics=['accuracy']
-        )
-
-        
-        lr_scheduler = LearningRateScheduler(self.lr_schedule)
-
-        lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),
-                                       cooldown=0,
-                                       patience=5,
-                                       min_lr=0.5e-6)
-
-        callbacks = [lr_reducer, lr_scheduler]
-
-        # Run training, with or without data augmentation.
-        if not data_augmentation:
-            print('Not using data augmentation.')
-            model.fit(X_train, y_train,
-                      batch_size=batch_size,
-                      epochs=epochs,
-                      validation_data=(X_test, y_test),
-                      shuffle=True,
-                      callbacks=callbacks)
-        else:
-            print('Using real-time data augmentation.')
-            # This will do preprocessing and realtime data augmentation:
-            datagen = ImageDataGenerator(
-                # set input mean to 0 over the dataset
-                featurewise_center=False,
-                # set each sample mean to 0
-                samplewise_center=False,
-                # divide inputs by std of dataset
-                featurewise_std_normalization=False,
-                # divide each input by its std
-                samplewise_std_normalization=False,
-                # apply ZCA whitening
-                zca_whitening=False,
-                # epsilon for ZCA whitening
-                zca_epsilon=1e-06,
-                # randomly rotate images in the range (deg 0 to 180)
-                rotation_range=0,
-                # randomly shift images horizontally
-                width_shift_range=0.1,
-                # randomly shift images vertically
-                height_shift_range=0.1,
-                # set range for random shear
-                shear_range=0.,
-                # set range for random zoom
-                zoom_range=0.,
-                # set range for random channel shifts
-                channel_shift_range=0.,
-                # set mode for filling points outside the input boundaries
-                fill_mode='nearest',
-                # value used for fill_mode = "constant"
-                cval=0.,
-                # randomly flip images
-                horizontal_flip=True,
-                # randomly flip images
-                vertical_flip=False,
-                # set rescaling factor (applied before any other transformation)
-                rescale=None,
-                # set function that will be applied on each input
-                preprocessing_function=None,
-                # image data format, either "channels_first" or "channels_last"
-                data_format="channels_first",
-                # fraction of images reserved for validation (strictly between 0 and 1)
-                validation_split=0.0)
-
-            # Compute quantities required for featurewise normalization
-            # (std, mean, and principal components if ZCA whitening is applied).
-            datagen.fit(X_train)
-
-            # Fit the model on the batches generated by datagen.flow().
-            model.fit_generator(datagen.flow(X_train, y_train, batch_size=batch_size),
-                                validation_data=(X_test, y_test),
-                                epochs=epochs, verbose=1, workers=4,
-                                callbacks=callbacks)
-
-        return model
-
-  
-    
-if __name__ == '__main__':
-
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/resnet18_cifar10/'
-    keras_model_file = MODEL_PARAMS_DIR + '/resnet18_cifar10/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/resnet18_cifar10_src/'
-    num_classes = 10
-    batch_size = 500
-
-    model = ResNet18_CIFAR10('ResNet18_CIFAR10', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    model.run(sys.argv)
-    
diff --git a/hpvm/projects/keras/src/resnet50_imagenet.py b/hpvm/projects/keras/src/resnet50_imagenet.py
deleted file mode 100644
index de42ae48d8..0000000000
--- a/hpvm/projects/keras/src/resnet50_imagenet.py
+++ /dev/null
@@ -1,155 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-class ResNet50(Benchmark):
-    
-    def buildModel(self):
-        
-        def identity_block(input_tensor, kernel_size, filters, stage, block):
-            filters1, filters2, filters3 = filters
-            bn_axis = 1
-
-            x = Conv2D(filters1, (1, 1))(input_tensor)
-            x = BatchNormalization(axis=bn_axis)(x)
-            x = Activation('relu')(x)
-
-            x = Conv2D(filters2, kernel_size,
-                              padding='same')(x)
-            x = BatchNormalization(axis=bn_axis)(x)
-            x = Activation('relu')(x)
-
-            x = Conv2D(filters3, (1, 1))(x)
-            x = BatchNormalization(axis=bn_axis)(x)
-
-            x = add([x, input_tensor])
-            x = Activation('relu')(x)
-            return x
-
-        def conv_block(input_tensor,
-                       kernel_size,
-                       filters,
-                       stage,
-                       block,
-                       strides=(2, 2)):
-            filters1, filters2, filters3 = filters
-            bn_axis = 1
-            x = Conv2D(filters1, (1, 1), strides=strides)(input_tensor)
-            x = BatchNormalization(axis=bn_axis)(x)
-            x = Activation('relu')(x)
-
-            x = Conv2D(filters2, kernel_size, padding='same')(x)
-            x = BatchNormalization(axis=bn_axis)(x)
-            x = Activation('relu')(x)
-
-            x = Conv2D(filters3, (1, 1))(x)
-            x = BatchNormalization(axis=bn_axis)(x)
-
-            shortcut = Conv2D(filters3, (1, 1), strides=strides)(input_tensor)
-            shortcut = BatchNormalization(
-                axis=bn_axis)(shortcut)
-
-            x = add([x, shortcut])
-            x = Activation('relu')(x)
-            return x
-
-        img_input = Input(shape=(3, 224, 224))
-        bn_axis = 1
-
-        x = ZeroPadding2D((3, 3))(img_input)
-        x = Conv2D(64, (7, 7), strides=(2, 2))(x)
-    #     x = BatchNormalization(axis=bn_axis)(x)
-        x = Activation('relu')(x)
-        x = MaxPooling2D((3, 3), strides=(2, 2))(x)
-        x = BatchNormalization(axis=bn_axis)(x)
-
-        x = conv_block(x, 3, [64, 64, 256], stage=2, block='a', strides=(1, 1))
-        x = identity_block(x, 3, [64, 64, 256], stage=2, block='b')
-        x = identity_block(x, 3, [64, 64, 256], stage=2, block='c')
-
-        x = conv_block(x, 3, [128, 128, 512], stage=3, block='a')
-        x = identity_block(x, 3, [128, 128, 512], stage=3, block='b')
-        x = identity_block(x, 3, [128, 128, 512], stage=3, block='c')
-        x = identity_block(x, 3, [128, 128, 512], stage=3, block='d')
-
-        x = conv_block(x, 3, [256, 256, 1024], stage=4, block='a')
-        x = identity_block(x, 3, [256, 256, 1024], stage=4, block='b')
-        x = identity_block(x, 3, [256, 256, 1024], stage=4, block='c')
-        x = identity_block(x, 3, [256, 256, 1024], stage=4, block='d')
-        x = identity_block(x, 3, [256, 256, 1024], stage=4, block='e')
-        x = identity_block(x, 3, [256, 256, 1024], stage=4, block='f')
-
-        x = conv_block(x, 3, [512, 512, 2048], stage=5, block='a')
-        x = identity_block(x, 3, [512, 512, 2048], stage=5, block='b')
-        x = identity_block(x, 3, [512, 512, 2048], stage=5, block='c')
-
-        x = AveragePooling2D((7, 7))(x)
-        x = Flatten()(x)
-        x = Dense(1000)(x)
-        x = Activation('softmax')(x)
-
-        model = Model(img_input, x)
-        
-        return model
-
-    
-    def data_preprocess(self):
-        X_train, y_train = None, None
-        
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/resnet50_imagenet/test_input.bin', dtype=np.float32)
-        X_test = X_test.reshape((-1, 3, 224, 224)) 
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/resnet50_imagenet/test_labels.bin', dtype=np.uint32)
-        
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/resnet50_imagenet/tune_input.bin', dtype=np.float32)
-        X_tuner = X_tuner.reshape((-1, 3, 224, 224)) 
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/resnet50_imagenet/tune_labels.bin', dtype=np.uint32)
- 
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-    
-
-    def trainModel(self, model):
-
-        assert False, "ImageNet training not supported - use Pretrained weights"
-
-
-    
-if __name__ == '__main__':
-      
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/resnet50_imagenet/'
-    keras_model_file = MODEL_PARAMS_DIR + '/resnet50_imagenet/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/resnet50_imagenet_src/'
-    num_classes = 1000
-    batch_size = 50
-
-    model = ResNet50('ResNet50_imagenet', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    model.run(sys.argv)
-
-
-    
diff --git a/hpvm/projects/keras/src/vgg16_cifar10.py b/hpvm/projects/keras/src/vgg16_cifar10.py
deleted file mode 100644
index 9a5071ee94..0000000000
--- a/hpvm/projects/keras/src/vgg16_cifar10.py
+++ /dev/null
@@ -1,197 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from keras.datasets import cifar10
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-class VGG16_CIFAR10(Benchmark):
-        
-    def buildModel(self):
-        # Build the network of vgg for 10 classes with massive dropout and weight decay as described in the paper.
-
-        self.weight_decay = 0.0005
-        self.x_shape = [3, 32, 32]
-
-        model = Sequential()
-        weight_decay = self.weight_decay
-
-        model.add(Conv2D(64, (3, 3), padding='same',
-                         input_shape=self.x_shape,kernel_regularizer=regularizers.l2(weight_decay)))
-        
-        model.add(Activation('relu'))
-        model.add(Dropout(0.3))
-
-        model.add(Conv2D(64, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-        model.add(Conv2D(128, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(128, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-        model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-        model.add(Dropout(0.5))
-
-        model.add(Flatten())
-        model.add(Dense(512,kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-    
-        model.add(Dropout(0.5))
-        model.add(Dense(self.num_classes))
-        model.add(Activation('softmax'))
-        return model
-
-    
-    def data_preprocess(self):
-
-        (X_train, y_train), (X_val, y_val) = cifar10.load_data()
-
-        X_train = X_train / 255.0
-        #X_val = X_val / 255.0
-
-        mean = np.mean(X_train)
-        std = np.std(X_train)
-        X_train = (X_train - mean) / (std + 1e-7)
-        #X_val = (X_val - mean) / (std + 1e-7)
-
-        X_test= np.fromfile(MODEL_PARAMS_DIR + '/vgg16_cifar10/test_input.bin', dtype=np.float32)
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_cifar10/test_labels.bin', dtype=np.uint32)
-
-        X_test = X_test.reshape((-1,3,32,32))
-
-        X_tuner= np.fromfile(MODEL_PARAMS_DIR + '/vgg16_cifar10/tune_input.bin', dtype=np.float32)
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_cifar10/tune_labels.bin', dtype=np.uint32)
-
-        X_tuner = X_tuner.reshape((-1,3,32,32))
-
-
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-
-
-    def trainModel(self, model, X_train, y_train, X_test, y_test):
-
-        y_train = to_categorical(y_train, self.num_classes)
-        y_test = to_categorical(y_test, self.num_classes)
-
-        batch_size = 128
-        learning_rate = 0.01
-        lr_drop = 20
-
-
-        def lr_scheduler(epoch):
-            return learning_rate * (0.5 ** (epoch // lr_drop))
-
-        reduce_lr = keras.callbacks.LearningRateScheduler(lr_scheduler)
-
-        #data augmentation
-        datagen = ImageDataGenerator(
-            featurewise_center=False,  # set input mean to 0 over the dataset
-            samplewise_center=False,  # set each sample mean to 0
-            featurewise_std_normalization=False,  # divide inputs by std of the dataset
-            samplewise_std_normalization=False,  # divide each input by its std
-            zca_whitening=False,  # apply ZCA whitening
-            rotation_range=15,  # randomly rotate images in the range (degrees, 0 to 180)
-            width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)
-            height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
-            horizontal_flip=True,  # randomly flip images
-            vertical_flip=False)  # randomly flip images
-        # (std, mean, and principal components if ZCA whitening is applied).
-        datagen.fit(X_train)
-
-
-        model.compile(
-            loss='categorical_crossentropy', 
-            optimizer=keras.optimizers.SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True),
-            metrics=['accuracy']
-        )
-
-        # training process in a for loop with learning rate drop every 20 epoches.
-        
-        model.fit_generator(
-            datagen.flow(X_train, y_train, batch_size=batch_size),
-            steps_per_epoch=X_train.shape[0] // batch_size,
-            epochs=250,
-            validation_data=(X_test, y_test),
-            callbacks=[reduce_lr]
-        )
-        
-        return model
-
-
-    
-if __name__ == '__main__':
-      
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/vgg16_cifar10/'
-    keras_model_file = MODEL_PARAMS_DIR + '/vgg16_cifar10/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/vgg16_cifar10_src/'
-    num_classes = 10
-    batch_size = 500
-
-    model = VGG16_CIFAR10('VGG16_CIFAR10', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    model.run(sys.argv)
-
-    
diff --git a/hpvm/projects/keras/src/vgg16_cifar100.py b/hpvm/projects/keras/src/vgg16_cifar100.py
deleted file mode 100644
index 0fd51ebe03..0000000000
--- a/hpvm/projects/keras/src/vgg16_cifar100.py
+++ /dev/null
@@ -1,211 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from keras.datasets import cifar100
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-class VGG16_CIFAR100(Benchmark):
-
-    def buildModel(self):
-
-        # Build the network of vgg for 100 classes 
-        self.weight_decay = 0.0005
-        self.x_shape = [3, 32, 32]
-
-        model = Sequential()
-        weight_decay = self.weight_decay
-
-        model.add(Conv2D(64, (3, 3), padding='same',
-                         input_shape=self.x_shape,kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(Dropout(0.3))
-
-        model.add(Conv2D(64, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-        model.add(Conv2D(128, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(128, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-        model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-        model.add(Dropout(0.4))
-
-        model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-
-        model.add(MaxPooling2D(pool_size=(2, 2)))
-        model.add(Dropout(0.5))
-
-        model.add(Flatten())
-        model.add(Dense(512,kernel_regularizer=regularizers.l2(weight_decay)))
-        model.add(Activation('relu'))
-        #model.add(BatchNormalization())
-
-        model.add(Dropout(0.5))
-        model.add(Dense(self.num_classes))
-        model.add(Activation('softmax'))
-        return model
-
-
-    def data_preprocess(self):
-
-        (X_train, y_train), (X_val, y_val) = cifar100.load_data()
-
-        X_train = X_train / 255.0
-        #X_val = X_val / 255.0
-
-        mean = np.mean(X_train)
-        std = np.std(X_train)
-        X_train = (X_train - mean) / (std + 1e-7)
-        #X_val = (X_val - mean) / (std + 1e-7)
-
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_cifar100/test_input.bin', dtype=np.float32)
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_cifar100/test_labels.bin', dtype=np.uint32)
-
-        X_test = X_test.reshape((-1,3,32,32))
-
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_cifar100/tune_input.bin', dtype=np.float32)
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_cifar100/tune_labels.bin', dtype=np.uint32)
-
-        X_tuner = X_tuner.reshape((-1,3,32,32))
-
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-
-
-    def trainModel(self,model, X_train, y_train, X_test, y_test):
-
-        y_train = to_categorical(y_train, self.num_classes)
-        y_test = to_categorical(y_test, self.num_classes)
-
-        batch_size = 128
-        learning_rate = 0.1
-        lr_drop = 30
-
-
-        def lr_scheduler(epoch):
-            return learning_rate * (0.5 ** (epoch // lr_drop))
-
-        reduce_lr = keras.callbacks.LearningRateScheduler(lr_scheduler)
-
-        #data augmentation
-        datagen = ImageDataGenerator(
-            featurewise_center=False,  # set input mean to 0 over the dataset
-            samplewise_center=False,  # set each sample mean to 0
-            featurewise_std_normalization=False,  # divide inputs by std of the dataset
-            samplewise_std_normalization=False,  # divide each input by its std
-            zca_whitening=False,  # apply ZCA whitening
-            rotation_range=15,  # randomly rotate images in the range (degrees, 0 to 180)
-            width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)
-            height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
-            horizontal_flip=True,  # randomly flip images
-            vertical_flip=False)  # randomly flip images
-        # (std, mean, and principal components if ZCA whitening is applied).
-        datagen.fit(X_train)
-
-
-        model.compile(
-            loss='categorical_crossentropy',
-            optimizer=optimizers.Adam(lr=learning_rate),
-            metrics=['accuracy']
-        )
-        
-        # training process in a for loop with learning rate drop every 25 epoches.
-        
-        model.fit_generator(
-            datagen.flow(X_train, y_train, batch_size=batch_size),
-            steps_per_epoch=X_train.shape[0] // batch_size,
-            epochs=250,
-            validation_data=(X_test, y_test),
-            callbacks=[reduce_lr]
-        )
-
-        return model
-
-
-    
-if __name__ == '__main__':
-
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/vgg16_cifar100/'
-    keras_model_file = MODEL_PARAMS_DIR + '/vgg16_cifar100/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/vgg16_cifar100_src/'
-    num_classes = 100
-    batch_size = 100
-
-    model = VGG16_CIFAR100('VGG16_CIFAR100', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    model.run(sys.argv)
-    
diff --git a/hpvm/projects/keras/src/vgg16_imagenet.py b/hpvm/projects/keras/src/vgg16_imagenet.py
deleted file mode 100644
index 6b9458b537..0000000000
--- a/hpvm/projects/keras/src/vgg16_imagenet.py
+++ /dev/null
@@ -1,140 +0,0 @@
-import os
-import sys
-import glob
-
-import numpy as np
-import tensorflow as tf
-import scipy
-import scipy.io
-import keras
-from keras.models import Model, Sequential
-from keras.layers import *
-from keras.optimizers import Adam
-from keras import regularizers
-from keras import backend as K
-from keras.utils import to_categorical
-from keras.preprocessing.image import ImageDataGenerator
-from keras.callbacks import LearningRateScheduler
-
-from Benchmark import Benchmark
-from Config import MODEL_PARAMS_DIR
-
-
-
-class VGG16(Benchmark):
-
-    def buildModel(self):
-        img_input = Input(shape=(3, 224, 224))
-
-        # Block 1
-        x = ZeroPadding2D(padding=(1, 1))(img_input)
-        x = Conv2D(64, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(64, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = MaxPooling2D((2, 2), strides=(2, 2))(x)
-
-        # Block 2
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(128, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(128, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = MaxPooling2D((2, 2), strides=(2, 2))(x)
-
-        # Block 3
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(256, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(256, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(256, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = MaxPooling2D((2, 2), strides=(2, 2))(x)
-
-        # Block 4
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(512, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(512, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(512, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = MaxPooling2D((2, 2), strides=(2, 2))(x)
-
-        # Block 5
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(512, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(512, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = ZeroPadding2D(padding=(1, 1))(x)
-        x = Conv2D(512, (3, 3), padding='valid')(x)
-        x = Activation('relu')(x)
-        x = MaxPooling2D((2, 2), strides=(2, 2))(x)
-
-    #     x = Flatten(data_format='channels_first')(x)
-        x = Flatten()(x)
-
-        x = Dense(4096)(x)
-        x = Activation('relu')(x)
-        x = Dropout(0.5)(x)
-        x = Dense(4096)(x)   
-        x = Activation('relu')(x)
-        x = Dropout(0.5)(x)
-        x = Dense(1000)(x)
-        x = Activation('softmax')(x)
-
-        model = Model(img_input, x)
-            
-        return model
-
-
-    def data_preprocess(self):
-        X_train, y_train = None, None
-        
-        X_test = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_imagenet/test_input.bin', dtype=np.float32)
-        X_test = X_test.reshape((-1, 3, 224, 224)) 
-        y_test = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_imagenet/test_labels.bin', dtype=np.uint32)
-        
-        X_tuner = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_imagenet/tune_input.bin', dtype=np.float32)
-        X_tuner = X_tuner.reshape((-1, 3, 224, 224)) 
-        y_tuner = np.fromfile(MODEL_PARAMS_DIR + '/vgg16_imagenet/tune_labels.bin', dtype=np.uint32)
- 
-        return X_train, y_train, X_test, y_test, X_tuner, y_tuner
-    
-    
-    def trainModel(self, model):
-
-        assert False, "ImageNet training not supported - use Pretrained weights"
-
-
-    
-if __name__ == '__main__':
-
-    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-    # Changing to NCHW format
-    K.set_image_data_format('channels_first')
-
-
-    ### Parameters specific to each benchmark
-    reload_dir = MODEL_PARAMS_DIR + '/vgg16_imagenet/'
-    keras_model_file = MODEL_PARAMS_DIR + '/vgg16_imagenet/weights.h5'
-    data_dir = '' 
-    src_dir = 'data/vgg16_imagenet_src/'
-    num_classes = 1000
-    batch_size = 25
-
-    alexnet = VGG16('VGG16_imagenet', reload_dir, keras_model_file, data_dir, src_dir, num_classes, batch_size)
-    
-    alexnet.run(sys.argv)
-
-
-    
-- 
GitLab