diff --git a/hpvm/test/dnn_benchmarks/keras/alexnet.py b/hpvm/test/dnn_benchmarks/keras/alexnet.py
index 7adfd5be5f2a91058e68ec39e6c73fe9d7b60492..86019e80e5a713d711b9d9c6e45cf91d4b01b9a5 100644
--- a/hpvm/test/dnn_benchmarks/keras/alexnet.py
+++ b/hpvm/test/dnn_benchmarks/keras/alexnet.py
@@ -143,9 +143,8 @@ if __name__ == '__main__':
     # *** 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/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/alexnet_cifar10.h5'
     data_dir = 'data/alexnet_cifar10_hpvm/'   # if reloading weights, data_dir can be set to empty string (value is ignored)
- 
     src_dir = 'src/alexnet_cifar10_src_hpvm/'  # 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 
diff --git a/hpvm/test/dnn_benchmarks/keras/alexnet2.py b/hpvm/test/dnn_benchmarks/keras/alexnet2.py
index 447d9d32ad6273c37b433a6bcc107613f164e68b..16bd92b23e3659be2f851d14e5030b8a436c3ac2 100644
--- a/hpvm/test/dnn_benchmarks/keras/alexnet2.py
+++ b/hpvm/test/dnn_benchmarks/keras/alexnet2.py
@@ -136,7 +136,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/alexnet2_cifar10/'
-    keras_model_file = MODEL_PARAMS_DIR + '/alexnet2_cifar10/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/alexnet2_cifar10.h5'
     data_dir = 'data/alexnet2_cifar10/' 
     src_dir = 'src/alexnet2_cifar10_src/'
     num_classes = 10
diff --git a/hpvm/test/dnn_benchmarks/keras/alexnet_imagenet.py b/hpvm/test/dnn_benchmarks/keras/alexnet_imagenet.py
index 9be1ff648c2ad27f99d4e1bccde8c4bb199dc174..9f5bbe12c93f667cae3bec37089a83b51df5311e 100644
--- a/hpvm/test/dnn_benchmarks/keras/alexnet_imagenet.py
+++ b/hpvm/test/dnn_benchmarks/keras/alexnet_imagenet.py
@@ -93,7 +93,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/alexnet_imagenet/'
-    keras_model_file = MODEL_PARAMS_DIR + '/alexnet_imagenet/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/alexnet_imagenet.h5'
     data_dir = 'data/alexnet_imagenet/' 
     src_dir = 'src/alexnet_imagenet_src/'
     num_classes = 1000
diff --git a/hpvm/test/dnn_benchmarks/keras/lenet.py b/hpvm/test/dnn_benchmarks/keras/lenet.py
index 9de3c28b15aa097d1412880c21537c016a7392ef..e158d709136f3d593a74aa8bc770faa1bd59707f 100644
--- a/hpvm/test/dnn_benchmarks/keras/lenet.py
+++ b/hpvm/test/dnn_benchmarks/keras/lenet.py
@@ -102,7 +102,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/lenet_mnist/'
-    keras_model_file = MODEL_PARAMS_DIR + '/lenet_mnist/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/lenet_mnist.h5'
     data_dir = 'data/lenet_mnist/' 
     src_dir = 'src/lenet_mnist_src/'
     num_classes = 10
diff --git a/hpvm/test/dnn_benchmarks/keras/mobilenet_cifar10.py b/hpvm/test/dnn_benchmarks/keras/mobilenet_cifar10.py
index 4987f3235f2458fc8ad78b7157941b648bc0e1c0..83b04445221d8826f62699a7fc2e45310654e857 100644
--- a/hpvm/test/dnn_benchmarks/keras/mobilenet_cifar10.py
+++ b/hpvm/test/dnn_benchmarks/keras/mobilenet_cifar10.py
@@ -182,7 +182,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/mobilenet_cifar10/'
-    keras_model_file = MODEL_PARAMS_DIR + '/mobilenet_cifar10/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/mobilenet_cifar10.h5'
     data_dir = 'data/mobilenet_cifar10/' 
     src_dir = 'src/mobilenet_cifar10_src/'
     num_classes = 10
diff --git a/hpvm/test/dnn_benchmarks/keras/resnet18_cifar10.py b/hpvm/test/dnn_benchmarks/keras/resnet18_cifar10.py
index 1a77cf1b2ce91c16a775e4a99df13dec2282e247..8ef31e3ff6dc2f252dbfa50fb557449220d01f39 100644
--- a/hpvm/test/dnn_benchmarks/keras/resnet18_cifar10.py
+++ b/hpvm/test/dnn_benchmarks/keras/resnet18_cifar10.py
@@ -554,7 +554,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/resnet18_cifar10/'
-    keras_model_file = MODEL_PARAMS_DIR + '/resnet18_cifar10/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/resnet18_cifar10.h5'
     data_dir = 'data/resnet18_cifar10/' 
     src_dir = 'src/resnet18_cifar10_src/'
     num_classes = 10
diff --git a/hpvm/test/dnn_benchmarks/keras/resnet50_imagenet.py b/hpvm/test/dnn_benchmarks/keras/resnet50_imagenet.py
index 6674faffab6e4c57b12607e01fda983b846dfa74..c1632750a91dc85815da15a1d0df718d00073311 100644
--- a/hpvm/test/dnn_benchmarks/keras/resnet50_imagenet.py
+++ b/hpvm/test/dnn_benchmarks/keras/resnet50_imagenet.py
@@ -141,7 +141,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/resnet50_imagenet/'
-    keras_model_file = MODEL_PARAMS_DIR + '/resnet50_imagenet/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/resnet50_imagenet.h5'
     data_dir = 'data/resnet50_imagenet/' 
     src_dir = 'src/resnet50_imagenet_src/'
     num_classes = 1000
diff --git a/hpvm/test/dnn_benchmarks/keras/test_benchmarks.py b/hpvm/test/dnn_benchmarks/keras/test_benchmarks.py
new file mode 100644
index 0000000000000000000000000000000000000000..27fceb44d2466604f4536561c7786407f3c571eb
--- /dev/null
+++ b/hpvm/test/dnn_benchmarks/keras/test_benchmarks.py
@@ -0,0 +1,229 @@
+
+
+import os
+import subprocess
+
+import site
+from pathlib import Path
+
+import torch
+from torch.utils.data.dataloader import DataLoader
+from torch.utils.data.dataset import Subset
+
+#site.addsitedir(Path(__file__).parent.parent.absolute().as_posix())
+#from predtuner import PipedBinaryApp, config_pylogger
+
+
+
+class Benchmark:
+
+    def __init__(self, binary_path, test_accuracy):
+
+        self.binary_path = binary_path
+        self.test_accuracy = test_accuracy
+        self.epsilon = 0.05 # Adding some slack for accuracy difference
+
+
+    def getPath(self):
+        return self.binary_path
+
+    
+    def readAccuracy(self, accuracy_file):
+
+        f = open(accuracy_file, "r") # File with final benchmark accuracy 
+        acc_str = f.read()
+        return float(acc_str)
+    
+        
+    def runKeras(self):
+
+        # Test Bechmark accuracy with pretrained weights (hpvm_relaod)
+        run_cmd = "python3 " + self.binary_path + " keras_reload "
+        try:
+            subprocess.call(run_cmd, shell=True)
+        except:
+            return False
+
+        accuracy = self.readAccuracy("final_accuracy")
+
+        print ("accuracy = ", accuracy, " test_accuracy = ", self.test_accuracy) 
+
+        test_success = False
+        if (abs(self.test_accuracy - accuracy) < self.epsilon):
+            print ("Test for " + self. binary_path + " Passed ")
+            test_success = True
+        else:
+            print ("Test Failed for " + self.binary_path)
+            test_success = False
+
+        return test_success
+
+
+    def runHPVM(self):
+
+        # Test Bechmark accuracy with pretrained weights (hpvm_relaod)
+        run_cmd = "python3 " + self.binary_path + " keras_reload frontend compile compile_tuner"
+        try:
+            subprocess.call(run_cmd, shell=True)
+        except:
+            return False
+
+        working_dir = open("working_dir.txt").read()
+        cur_dir = os.getcwd()
+        
+        os.chdir(working_dir)
+        binary_path =  "./HPVM_binary"
+        
+        try:
+            subprocess.call(binary_path, shell=True)
+        except:
+            return False
+        
+        accuracy = self.readAccuracy("final_accuracy")
+        print ("accuracy = ", accuracy, " test_accuracy = ", self.test_accuracy) 
+
+        test_success = False
+        if (abs(self.test_accuracy - accuracy) < self.epsilon):
+            print ("Test for " + self. binary_path + " Passed ")
+            test_success = True
+        else:
+            print ("Test Failed for " + self.binary_path)
+            test_success = False
+
+        os.chdir(cur_dir)  # Change back to original working directory
+        
+        return test_success
+
+
+"""    
+    def runApproxTuner(self):
+
+        working_dir = open("working_dir.txt").read()
+        cur_dir = os.getcwd()
+        
+        os.chdir(working_dir)
+        binary_path =  "./HPVM_tuner_binary"
+
+        full_binary_path = str(cur_dir) + "/" +  working_dir + "/" + binary_path
+        full_json_path = str(cur_dir) + "/" + working_dir + "/tuner.json"
+    
+        app = PipedBinaryApp("TestHPVMApp", full_binary_path, full_json_path)
+        # Tuning procedure is exactly the same as that for PyTorch DNN.
+        # Please refer to `./tune_vgg16_cifar10.py` for details.
+        tuner = app.get_tuner()
+        tuner.tune(5000, 3.0, 3.0, True, 50, cost_model="cost_linear", qos_model="qos_p1")
+
+        tuner.dump_configs("configs.json")
+        fig = tuner.plot_configs(show_qos_loss=True)
+        fig.savefig("configs.png", dpi=300)
+        app.dump_hpvm_configs(tuner.best_configs, "hpvm_confs.txt")
+
+        os.chdir(cur_dir)  # Change back to original working directory
+"""
+            
+        
+
+class BenchmarkTests:
+
+    def __init__(self):
+
+        self.benchmarks = []
+        self.passed_tests = []
+        self.failed_tests = []
+        self.passed_hpvm_tests = []
+        self.failed_hpvm_tests = []
+
+
+    def addBenchmark(self, benchmark):
+
+        self.benchmarks.append(benchmark)
+
+
+    def runKerasTests(self):
+
+        for benchmark in self.benchmarks:
+            test_success = benchmark.runKeras()
+
+            if not test_success:
+                self.failed_tests.append(benchmark.getPath())
+            else:
+                self.passed_tests.append(benchmark.getPath())
+
+
+    def runHPVMTests(self):
+
+        for benchmark in self.benchmarks:
+            test_success = benchmark.runHPVM()
+
+            if not test_success:
+                self.failed_hpvm_tests.append(benchmark.getPath())
+            else:
+                self.passed_hpvm_tests.append(benchmark.getPath())
+
+
+    def printKerasSummary(self):
+
+        failed_test_count = len(self.failed_tests)
+        passed_test_count = len(self.passed_tests)
+        
+        print (" Tests Passed  = " + str(passed_test_count) + " / " + str(len(self.benchmarks)))
+        print ("******* Passed Tests ** \n")
+        for passed_test in self.passed_tests:
+            print ("Passed: " + passed_test)
+
+        print (" Tests Failed  = " + str(failed_test_count) + " / " + str(len(self.benchmarks)))
+        print ("****** Failed Tests *** \n")
+        for failed_test in self.failed_tests:
+            print ("Failed: " + failed_test)
+            
+
+    def printHPVMSummary(self):
+
+        failed_test_count = len(self.failed_hpvm_tests)
+        passed_test_count = len(self.passed_hpvm_tests)
+        
+        print (" Tests Passed  = " + str(passed_test_count) + " / " + str(len(self.benchmarks)))
+        print ("******* Passed Tests ** \n")
+        for passed_test in self.passed_hpvm_tests:
+            print ("Passed: " + passed_test)
+
+        print (" Tests Failed  = " + str(failed_test_count) + " / " + str(len(self.benchmarks)))
+        print ("****** Failed Tests *** \n")
+        for failed_test in self.failed_hpvm_tests:
+            print ("Failed: " + failed_test)
+            
+
+        
+            
+if __name__ == "__main__":
+
+    testMgr = BenchmarkTests()
+    AlexNet = Benchmark("alexnet.py", 79.28)
+    AlexNet_ImageNet = Benchmark("alexnet_imagenet.py", 56.30)
+    AlexNet2 = Benchmark("alexnet2.py", 84.98)
+    LeNet = Benchmark("lenet.py", 98.70)
+    MobileNet = Benchmark("mobilenet_cifar10.py", 84.42)
+    ResNet18 = Benchmark("resnet18_cifar10.py", 89.56)
+    ResNet50 = Benchmark("resnet50_imagenet.py", 75.10)
+    VGG16_cifar10 = Benchmark("vgg16_cifar10.py", 89.96)
+    VGG16_cifar100 = Benchmark("vgg16_cifar100.py", 66.50)
+    VGG16_ImageNet = Benchmark("vgg16_imagenet.py", 69.46)
+
+    testMgr.addBenchmark(AlexNet)
+    #testMgr.addBenchmark(AlexNet_ImageNet)
+    testMgr.addBenchmark(AlexNet2)
+    testMgr.addBenchmark(LeNet)
+    testMgr.addBenchmark(MobileNet)
+    testMgr.addBenchmark(ResNet18)
+    #testMgr.addBenchmark(ResNet50)
+    testMgr.addBenchmark(VGG16_cifar10)
+    testMgr.addBenchmark(VGG16_cifar100)
+    #testMgr.addBenchmark(VGG16_ImageNet)
+
+    #testMgr.runKerasTests()
+    #testMgr.printKerasSummary()
+    
+    testMgr.runHPVMTests()
+    testMgr.printHPVMSummary()
+
+    
diff --git a/hpvm/test/dnn_benchmarks/keras/vgg16_cifar10.py b/hpvm/test/dnn_benchmarks/keras/vgg16_cifar10.py
index 53207a039cafa9a89a34641ab887b21936c10ec1..9f298ebfa6a385bbeee48a2bbf6c193d8849a4d9 100644
--- a/hpvm/test/dnn_benchmarks/keras/vgg16_cifar10.py
+++ b/hpvm/test/dnn_benchmarks/keras/vgg16_cifar10.py
@@ -184,7 +184,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/vgg16_cifar10/'
-    keras_model_file = MODEL_PARAMS_DIR + '/vgg16_cifar10/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/vgg16_cifar10.h5'
     data_dir = 'data/vgg16_cifar10/' 
     src_dir = 'src/vgg16_cifar10_src/'
     num_classes = 10
diff --git a/hpvm/test/dnn_benchmarks/keras/vgg16_cifar100.py b/hpvm/test/dnn_benchmarks/keras/vgg16_cifar100.py
index 6fcfd3249e24ace232d5c5c6e70e5e8d2842f773..4f6168d0f022223b2f355791f2bd7b11d5e04440 100644
--- a/hpvm/test/dnn_benchmarks/keras/vgg16_cifar100.py
+++ b/hpvm/test/dnn_benchmarks/keras/vgg16_cifar100.py
@@ -199,7 +199,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/vgg16_cifar100/'
-    keras_model_file = MODEL_PARAMS_DIR + '/vgg16_cifar100/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/vgg16_cifar100.h5'
     data_dir = 'data/vgg16_cifar100/' 
     src_dir = 'src/vgg16_cifar100_src/'
     num_classes = 100
diff --git a/hpvm/test/dnn_benchmarks/keras/vgg16_imagenet.py b/hpvm/test/dnn_benchmarks/keras/vgg16_imagenet.py
index a881d2340f93ed8dac2c86bdd57c1f7be5e1330f..c84b429407cf491c5d6f4b6cb30b1c34e971612c 100644
--- a/hpvm/test/dnn_benchmarks/keras/vgg16_imagenet.py
+++ b/hpvm/test/dnn_benchmarks/keras/vgg16_imagenet.py
@@ -126,7 +126,7 @@ if __name__ == '__main__':
 
     ### Parameters specific to each benchmark
     reload_dir = MODEL_PARAMS_DIR + '/vgg16_imagenet/'
-    keras_model_file = MODEL_PARAMS_DIR + '/vgg16_imagenet/model.h5'
+    keras_model_file = MODEL_PARAMS_DIR + '/keras/vgg16_imagenet.h5'
     data_dir = 'data/vgg16_imagenet/' 
     src_dir = 'src/vgg16_imagenet_src/'
     num_classes = 1000