diff --git a/classifiers/attribute_classifiers/__init__.py b/classifiers/attribute_classifiers/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/classifiers/attribute_classifiers/__init__.pyc b/classifiers/attribute_classifiers/__init__.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ae52301a780f66bda35035e28368b85b5b73608d
Binary files /dev/null and b/classifiers/attribute_classifiers/__init__.pyc differ
diff --git a/classifiers/attribute_classifiers/atr_data_io_helper.py b/classifiers/attribute_classifiers/atr_data_io_helper.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f707a91e22c77b26389de284fe3e9dc8a13b8e7
--- /dev/null
+++ b/classifiers/attribute_classifiers/atr_data_io_helper.py
@@ -0,0 +1,83 @@
+import json
+import sys
+import os
+import matplotlib.pyplot as plt
+import matplotlib.image as mpimg
+import numpy as np
+import tensorflow as tf
+from scipy import misc
+
+def atr_mini_batch_loader(json_filename, image_dir, mean_image, start_index, batch_size, img_height=100, img_width=100, channels=3):
+
+    with open(json_filename, 'r') as json_file: 
+        json_data = json.load(json_file)
+
+    atr_images = np.empty(shape=[9*batch_size, img_height/3, img_width/3, channels])
+    atr_labels = np.zeros(shape=[9*batch_size, 4])
+
+    for i in range(start_index, start_index + batch_size):
+        image_name = os.path.join(image_dir, str(i) + '.jpg')
+        image = misc.imresize(mpimg.imread(image_name),(img_height, img_width), interp='nearest')
+        crop_shape = np.array([image.shape[0], image.shape[1]])/3
+        selected_anno = [q for q in json_data if q['image_id']==i]
+        grid_config = selected_anno[0]['config']
+        
+        counter = 0;
+        for grid_row in range(0,3):
+            for grid_col in range(0,3):
+                start_row = grid_row*crop_shape[0]
+                start_col = grid_col*crop_shape[1]
+                cropped_image = image[start_row:start_row+crop_shape[0], start_col:start_col+crop_shape[1], :]
+                if np.ndim(mean_image)==0:
+                    atr_images[9*(i-start_index)+counter,:,:,:] = cropped_image/254.0
+                else:
+                    atr_images[9*(i-start_index)+counter,:,:,:] = (cropped_image / 254.0) - mean_image
+                atr_labels[9*(i-start_index)+counter, grid_config[6*grid_row+2*grid_col+1]] = 1
+                counter = counter + 1
+
+    return (atr_images, atr_labels)
+
+def mean_image_batch(json_filename, image_dir, start_index, batch_size, img_height=100, img_width=100, channels=3):
+    batch = atr_mini_batch_loader(json_filename, image_dir, np.empty([]), start_index, batch_size, img_height, img_width, channels)
+    mean_image = np.mean(batch[0], 0)
+    return mean_image
+
+def mean_image(json_filename, image_dir, num_images, batch_size, img_height=100, img_width=100, channels=3):
+    max_iter = np.floor(num_images/batch_size)
+    mean_image = np.zeros([img_height/3, img_width/3, channels])
+    for i in range(max_iter.astype(np.int16)):
+        mean_image = mean_image + mean_image_batch(json_filename, image_dir, 1+i*batch_size, batch_size, img_height, img_width, channels)
+
+    mean_image = mean_image/max_iter
+    return mean_image
+
+
+class html_atr_table_writer():
+    def __init__(self, filename):
+        self.filename = filename
+        self.html_file = open(self.filename, 'w')
+        self.html_file.write("""<!DOCTYPE html>\n<html>\n<body>\n<table border="1" style="width:100%"> \n""")
+    
+    def add_element(self, col_dict):
+        self.html_file.write('    <tr>\n')
+        for key in range(len(col_dict)):
+            self.html_file.write("""    <td>{}</td>\n""".format(col_dict[key]))
+        self.html_file.write('    </tr>\n')
+
+    def image_tag(self, image_path, height, width):
+        return """<img src="{}" alt="IMAGE NOT FOUND!" height={} width={}>""".format(image_path,height,width)
+        
+    def close_file(self):
+        self.html_file.write('</table>\n</body>\n</html>')
+        self.html_file.close()
+
+        
+    
+
+if __name__=="__main__":
+
+    html_writer = html_atr_table_writer('/home/tanmay/Code/GenVQA/Exp_Results/Atr_Classifier_v_1/trial.html')
+    col_dict={0: 'sam', 1: html_writer.image_tag('something.png',25,25)}
+    html_writer.add_element(col_dict)
+    html_writer.close_file()
+
diff --git a/classifiers/attribute_classifiers/atr_data_io_helper.pyc b/classifiers/attribute_classifiers/atr_data_io_helper.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b958afac0eda1f2f3ff3b1e2e2dc36c210e170a5
Binary files /dev/null and b/classifiers/attribute_classifiers/atr_data_io_helper.pyc differ
diff --git a/classifiers/attribute_classifiers/eval_atr_classifier.py b/classifiers/attribute_classifiers/eval_atr_classifier.py
new file mode 100644
index 0000000000000000000000000000000000000000..c3222b1b1495b1bd6813f39d807f773aad9a7b83
--- /dev/null
+++ b/classifiers/attribute_classifiers/eval_atr_classifier.py
@@ -0,0 +1,66 @@
+import sys
+import os
+import matplotlib.pyplot as plt
+import matplotlib.image as mpimg
+import numpy as np
+from scipy import misc
+import tensorflow as tf
+import atr_data_io_helper as atr_data_loader 
+import tf_graph_creation_helper as graph_creator
+import plot_helper as plotter
+
+def eval(eval_params):
+    sess=tf.InteractiveSession()
+    
+    x, y, keep_prob = graph_creator.placeholder_inputs()
+    _ = graph_creator.obj_comp_graph(x, 1.0)
+    obj_feat = tf.get_collection('obj_feat', scope='obj/conv2')
+    y_pred = graph_creator.atr_comp_graph(x, keep_prob, obj_feat[0])
+    accuracy = graph_creator.evaluation(y, y_pred)
+
+    saver = tf.train.Saver()
+    saver.restore(sess, eval_params['model_name'] + '-' + str(eval_params['global_step']))
+
+    mean_image = np.load(os.path.join(eval_params['out_dir'], 'mean_image.npy'))
+    test_json_filename = eval_params['test_json']
+    image_dir = eval_params['image_dir']
+    html_dir = eval_params['html_dir']
+    if not os.path.exists(html_dir):
+        os.mkdir(html_dir)
+    html_writer = atr_data_loader.html_atr_table_writer(os.path.join(html_dir, 'index.html'))
+    col_dict = {
+        0: 'Grount Truth',
+        1: 'Prediction',
+        2: 'Image'}
+    html_writer.add_element(col_dict)
+    color_dict = {
+        0: 'red', # blanks are treated as red
+        1: 'green',
+        2: 'blue'}
+    
+    batch_size = 100
+    correct = 0
+    for i in range(50):  
+        test_batch = atr_data_loader.atr_mini_batch_loader(test_json_filename, image_dir, mean_image, 10000+i*batch_size, batch_size, 75, 75)
+        feed_dict_test={x: test_batch[0], y: test_batch[1], keep_prob: 1.0}
+        result = sess.run([accuracy, y_pred], feed_dict=feed_dict_test)
+        correct = correct + result[0]*batch_size
+        print(correct)
+
+        for row in range(batch_size*9):
+            gt_id = np.argmax(test_batch[1][row,:])
+            pred_id = np.argmax(result[1][row, :])
+            if not gt_id==pred_id:
+                img_filename = os.path.join(html_dir,'{}_{}.png'.format(i,row))
+                misc.imsave(img_filename, test_batch[0][row,:,:,:] + mean_image)
+                col_dict = {
+                    0: color_dict[gt_id],
+                    1: color_dict[pred_id],
+                    2: html_writer.image_tag('{}_{}.png'.format(i,row), 25, 25)}
+                html_writer.add_element(col_dict)
+
+    html_writer.close_file()
+    print('Test Accuracy: {}'.format(correct / 5000))
+
+    sess.close()
+    tf.reset_default_graph()
diff --git a/classifiers/attribute_classifiers/eval_atr_classifier.pyc b/classifiers/attribute_classifiers/eval_atr_classifier.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0be14f65263aa832ead7df9c9f5988c223c072a2
Binary files /dev/null and b/classifiers/attribute_classifiers/eval_atr_classifier.pyc differ
diff --git a/classifiers/attribute_classifiers/train_atr_classifier.py b/classifiers/attribute_classifiers/train_atr_classifier.py
index dd490ad1aa5110c83248239d232f071112745df8..5145bae811398fb383b34a0ad95f7c323e068704 100644
--- a/classifiers/attribute_classifiers/train_atr_classifier.py
+++ b/classifiers/attribute_classifiers/train_atr_classifier.py
@@ -5,36 +5,33 @@ import matplotlib.image as mpimg
 import numpy as np
 import tensorflow as tf
 import atr_data_io_helper as atr_data_loader
+import tf_graph_creation_helper as graph_creator
+import plot_helper as plotter
 
-def train():
-    # Start session
+def train(train_params):
     sess = tf.InteractiveSession()
 
-    x, y, keep_prob = placeholder_inputs()
-    y_pred = comp_graph_v_2(x, y, keep_prob)
-
-    # Specify loss
-    cross_entropy = -tf.reduce_sum(y*tf.log(y_pred))
-    
-    # Specify training method
-    train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
-
-    # Evaluator
-    accuracy = evaluation(y, y_pred)
+    x, y, keep_prob = graph_creator.placeholder_inputs()
+    _ = graph_creator.obj_comp_graph(x, 1.0)
+    obj_feat = tf.get_collection('obj_feat', scope='obj/conv2')
+    y_pred = graph_creator.atr_comp_graph(x, keep_prob, obj_feat[0])
+    cross_entropy = graph_creator.loss(y, y_pred)
+    vars_to_opt = tf.get_collection(tf.GraphKeys.VARIABLES, scope='atr')
+    all_vars = tf.get_collection(tf.GraphKeys.VARIABLES)
+    print('Variables that are being optimized: ' + ' '.join([var.name for var in vars_to_opt]))
+    print('All variables: ' + ' '.join([var.name for var in all_vars]))
+    train_step = tf.train.AdamOptimizer(train_params['adam_lr']).minimize(cross_entropy, var_list=vars_to_opt)
+    accuracy = graph_creator.evaluation(y, y_pred)
     
-    # Merge summaries and write them to ~/Code/Tensorflow_Exp/logDir
-    merged = tf.merge_all_summaries()
-
-    # Output dir
-    outdir = '/home/tanmay/Code/GenVQA/Exp_Results/Atr_Classifier_v_1/'
+    outdir = train_params['out_dir']
     if not os.path.exists(outdir):
         os.mkdir(outdir)
 
     # Training Data
     img_width = 75
     img_height = 75
-    train_json_filename = '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/train_anno.json'
-    image_dir = '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/images'
+    train_json_filename = train_params['train_json']
+    image_dir = train_params['image_dir']
     mean_image = atr_data_loader.mean_image(train_json_filename, image_dir, 1000, 100, img_height, img_width)
     np.save(os.path.join(outdir, 'mean_image.npy'), mean_image)
 
@@ -44,12 +41,17 @@ def train():
     
     # Session Saver
     saver = tf.train.Saver()
-
+    
     # Start Training
     sess.run(tf.initialize_all_variables())
-    batch_size = 100
-    max_epoch = 10
-    max_iter = 95
+
+    # Restore obj network parameters
+    saver.restore(sess, train_params['obj_model_name'] + '-' + str(train_params['obj_global_step']))
+
+
+    batch_size = 10
+    max_epoch = 2
+    max_iter = 950
     val_acc_array_iter = np.empty([max_iter*max_epoch])
     val_acc_array_epoch = np.zeros([max_epoch])
     train_acc_array_epoch = np.zeros([max_epoch])
@@ -57,24 +59,20 @@ def train():
         for i in range(max_iter):
             train_batch = atr_data_loader.atr_mini_batch_loader(train_json_filename, image_dir, mean_image, 1+i*batch_size, batch_size, img_height, img_width)
             feed_dict_train={x: train_batch[0], y: train_batch[1], keep_prob: 0.5}
-
             _, current_train_batch_acc = sess.run([train_step, accuracy], feed_dict=feed_dict_train)
-
             train_acc_array_epoch[epoch] =  train_acc_array_epoch[epoch] + current_train_batch_acc
             val_acc_array_iter[i+epoch*max_iter] = accuracy.eval(feed_dict_val)
+            plotter.plot_accuracy(np.arange(0,i+1+epoch*max_iter)+1, val_acc_array_iter[0:i+1+epoch*max_iter], xlim=[1, max_epoch*max_iter], ylim=[0, 1.], savePath=os.path.join(outdir,'valAcc_vs_iter.pdf'))
             print('Step: {}  Val Accuracy: {}'.format(i+1+epoch*max_iter, val_acc_array_iter[i+epoch*max_iter]))
-            plot_accuracy(np.arange(0,i+1+epoch*max_iter)+1, val_acc_array_iter[0:i+1+epoch*max_iter], xlim=[1, max_epoch*max_iter], ylim=[0, 1.], savePath=os.path.join(outdir,'valAcc_vs_iter.pdf'))
-            
-            
+        
         train_acc_array_epoch[epoch] = train_acc_array_epoch[epoch] / max_iter 
         val_acc_array_epoch[epoch] = val_acc_array_iter[i+epoch*max_iter]
-        
-        plot_accuracies(xdata=np.arange(0,epoch+1)+1, ydata_train=train_acc_array_epoch[0:epoch+1], ydata_val=val_acc_array_epoch[0:epoch+1], xlim=[1, max_epoch], ylim=[0, 1.], savePath=os.path.join(outdir,'acc_vs_epoch.pdf'))
-
-        save_path = saver.save(sess, os.path.join(outdir,'obj_classifier_{}.ckpt'.format(epoch)))
+        plotter.plot_accuracies(xdata=np.arange(0,epoch+1)+1, ydata_train=train_acc_array_epoch[0:epoch+1], ydata_val=val_acc_array_epoch[0:epoch+1], xlim=[1, max_epoch], ylim=[0, 1.], savePath=os.path.join(outdir,'acc_vs_epoch.pdf'))
+        save_path = saver.save(sess, os.path.join(outdir,'atr_classifier'), global_step=epoch)
             
     
     sess.close()
+    tf.reset_default_graph()
 
 if __name__=='__main__':
     train()
diff --git a/classifiers/attribute_classifiers/train_atr_classifier.pyc b/classifiers/attribute_classifiers/train_atr_classifier.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..78a4e66e7a05fc26d316c57a52f11a19907ab03e
Binary files /dev/null and b/classifiers/attribute_classifiers/train_atr_classifier.pyc differ
diff --git a/classifiers/object_classifiers/eval_obj_classifier.py b/classifiers/object_classifiers/eval_obj_classifier.py
index 6c78aa440718d3e398ccbba3ee4ca7ce5b58c30e..e9320c43652b62c54349d950f69415ed4ac93cfa 100644
--- a/classifiers/object_classifiers/eval_obj_classifier.py
+++ b/classifiers/object_classifiers/eval_obj_classifier.py
@@ -5,7 +5,7 @@ import matplotlib.image as mpimg
 import numpy as np
 from scipy import misc
 import tensorflow as tf
-import object_classifiers.obj_data_io_helper as shape_data_loader
+import obj_data_io_helper as shape_data_loader
 import tf_graph_creation_helper as graph_creator
 import plot_helper as plotter
 
@@ -25,32 +25,42 @@ def eval(eval_params):
     if not os.path.exists(html_dir):
         os.mkdir(html_dir)
     html_writer = shape_data_loader.html_obj_table_writer(os.path.join(html_dir, 'index.html'))
-    col_dict = {0: 'Grount Truth',
-                1: 'Prediction',
-                2: 'Image'}
+    col_dict = {
+        0: 'Grount Truth',
+        1: 'Prediction',
+        2: 'Image'}
     html_writer.add_element(col_dict)
-    shape_dict = {0: 'blank',
-                  1: 'rectangle',
-                  2: 'triangle',
-                  3: 'circle'}
+    shape_dict = {
+        0: 'blank',
+        1: 'rectangle',
+        2: 'triangle',
+        3: 'circle'}
+
     batch_size = 100
     correct = 0
-    for i in range(1):
+    for i in range(50):
         test_batch = shape_data_loader.obj_mini_batch_loader(test_json_filename, image_dir, mean_image, 10000 + i * batch_size, batch_size, 75, 75)
+        #print(test_batch[0].dtype)
+#        print([np.amax(test_batch[0][0,:, :, :]), np.amax(mean_image)])
         feed_dict_test = {x: test_batch[0], y: test_batch[1], keep_prob: 1.0}
         result = sess.run([accuracy, y_pred], feed_dict=feed_dict_test)
         correct = correct + result[0] * batch_size
         print correct
+
         for row in range(batch_size * 9):
             gt_id = np.argmax(test_batch[1][row, :])
             pred_id = np.argmax(result[1][row, :])
             if not gt_id == pred_id:
                 img_filename = os.path.join(html_dir, '{}_{}.png'.format(i, row))
-                misc.imsave(img_filename, test_batch[0][row, :, :, :])
-                col_dict = {0: shape_dict[gt_id],
-                 1: shape_dict[pred_id],
-                 2: html_writer.image_tag('{}_{}.png'.format(i, row), 25, 25)}
+                misc.imsave(img_filename, test_batch[0][row, :, :, :] + mean_image)
+                col_dict = {
+                    0: shape_dict[gt_id],
+                    1: shape_dict[pred_id],
+                    2: html_writer.image_tag('{}_{}.png'.format(i, row), 25, 25)}
                 html_writer.add_element(col_dict)
 
     html_writer.close_file()
     print 'Test Accuracy: {}'.format(correct / 5000)
+
+    sess.close()
+    tf.reset_default_graph()
diff --git a/classifiers/object_classifiers/eval_obj_classifier.pyc b/classifiers/object_classifiers/eval_obj_classifier.pyc
index c4e6f97b11143b781aef4f2a8c5d37ac1afe9cfa..48898ca0a27747f6356b9311b4ebe8a2e4f3f745 100644
Binary files a/classifiers/object_classifiers/eval_obj_classifier.pyc and b/classifiers/object_classifiers/eval_obj_classifier.pyc differ
diff --git a/classifiers/object_classifiers/obj_data_io_helper.py b/classifiers/object_classifiers/obj_data_io_helper.py
index 5a683295430fdb4438a4127c41b1fa70e2c67e16..1e9b435f2b9f058837044ca08a182622af0b750e 100644
--- a/classifiers/object_classifiers/obj_data_io_helper.py
+++ b/classifiers/object_classifiers/obj_data_io_helper.py
@@ -1,4 +1,3 @@
-#Embedded file name: /home/tanmay/Code/GenVQA/GenVQA/classifiers/object_classifiers/obj_data_io_helper.py
 import json
 import sys
 import os
@@ -9,19 +8,20 @@ import tensorflow as tf
 from scipy import misc
 
 def obj_mini_batch_loader(json_filename, image_dir, mean_image, start_index, batch_size, img_height = 100, img_width = 100, channels = 3):
+
     with open(json_filename, 'r') as json_file:
         json_data = json.load(json_file)
-    obj_images = np.empty(shape=[9 * batch_size,
-     img_height / 3,
-     img_width / 3,
-     channels])
+
+    obj_images = np.empty(shape=[9 * batch_size, img_height / 3, img_width / 3, channels])
     obj_labels = np.zeros(shape=[9 * batch_size, 4])
+
     for i in range(start_index, start_index + batch_size):
         image_name = os.path.join(image_dir, str(i) + '.jpg')
         image = misc.imresize(mpimg.imread(image_name), (img_height, img_width), interp='nearest')
         crop_shape = np.array([image.shape[0], image.shape[1]]) / 3
         selected_anno = [ q for q in json_data if q['image_id'] == i ]
         grid_config = selected_anno[0]['config']
+
         counter = 0
         for grid_row in range(0, 3):
             for grid_col in range(0, 3):
@@ -31,7 +31,7 @@ def obj_mini_batch_loader(json_filename, image_dir, mean_image, start_index, bat
                 if np.ndim(mean_image) == 0:
                     obj_images[9 * (i - start_index) + counter, :, :, :] = cropped_image / 254.0
                 else:
-                    obj_images[9 * (i - start_index) + counter, :, :, :] = (cropped_image - mean_image) / 254
+                    obj_images[9 * (i - start_index) + counter, :, :, :] = (cropped_image / 254.0) - mean_image
                 obj_labels[9 * (i - start_index) + counter, grid_config[6 * grid_row + 2 * grid_col]] = 1
                 counter = counter + 1
 
@@ -51,7 +51,6 @@ def mean_image(json_filename, image_dir, num_images, batch_size, img_height = 10
         mean_image = mean_image + mean_image_batch(json_filename, image_dir, 1 + i * batch_size, batch_size, img_height, img_width, channels)
 
     mean_image = mean_image / max_iter
-    tmp_mean_image = mean_image * 254
     return mean_image
 
 
diff --git a/classifiers/object_classifiers/obj_data_io_helper.pyc b/classifiers/object_classifiers/obj_data_io_helper.pyc
index 46ba9ab54418e0b517e20fe9253b2dbea0b4aa99..9bdb6c7015cc3a0da7906325045969549a720070 100644
Binary files a/classifiers/object_classifiers/obj_data_io_helper.pyc and b/classifiers/object_classifiers/obj_data_io_helper.pyc differ
diff --git a/classifiers/object_classifiers/train_obj_classifier.py b/classifiers/object_classifiers/train_obj_classifier.py
index 292e1ca9bd5796758cf8a87638efcb8429d35e17..45d5830b4c22c80b468c4e4d5169ad0692570967 100644
--- a/classifiers/object_classifiers/train_obj_classifier.py
+++ b/classifiers/object_classifiers/train_obj_classifier.py
@@ -21,21 +21,26 @@ def train(train_params):
     if not os.path.exists(outdir):
         os.mkdir(outdir)
 
+    # Training Data
     img_width = 75
     img_height = 75
     train_json_filename = train_params['train_json']
     image_dir = train_params['image_dir']
     mean_image = shape_data_loader.mean_image(train_json_filename, image_dir, 1000, 100, img_height, img_width)
     np.save(os.path.join(outdir, 'mean_image.npy'), mean_image)
+
+    # Val Data
     val_batch = shape_data_loader.obj_mini_batch_loader(train_json_filename, image_dir, mean_image, 9501, 499, img_height, img_width)
     feed_dict_val = {x: val_batch[0], y: val_batch[1], keep_prob: 1.0}
     
+    # Session Saver
     saver = tf.train.Saver()
     
+    # Start Training
     sess.run(tf.initialize_all_variables())
     batch_size = 10
     max_epoch = 2
-    max_iter = 1
+    max_iter = 950
     val_acc_array_iter = np.empty([max_iter * max_epoch])
     val_acc_array_epoch = np.zeros([max_epoch])
     train_acc_array_epoch = np.zeros([max_epoch])
diff --git a/classifiers/object_classifiers/train_obj_classifier.pyc b/classifiers/object_classifiers/train_obj_classifier.pyc
index d803fd2f3ff49fa7edbd7c3cee464cb231ef703c..eac87e3278c2ff50ee06780b0e6328693ac40b63 100644
Binary files a/classifiers/object_classifiers/train_obj_classifier.pyc and b/classifiers/object_classifiers/train_obj_classifier.pyc differ
diff --git a/classifiers/train_classifiers.py b/classifiers/train_classifiers.py
index 63678074528333f8a40de268d59c46b81426deab..d2edabb9bafb5043b1059983373bb402c12e0629 100644
--- a/classifiers/train_classifiers.py
+++ b/classifiers/train_classifiers.py
@@ -6,35 +6,59 @@ import numpy as np
 import tensorflow as tf
 import object_classifiers.train_obj_classifier as obj_trainer
 import object_classifiers.eval_obj_classifier as obj_evaluator
+import attribute_classifiers.train_atr_classifier as atr_trainer
+import attribute_classifiers.eval_atr_classifier as atr_evaluator
 
 workflow = {
     'train_obj': False,
     'eval_obj': False,
+    'train_atr': True,
+    'eval_atr': True,
 }
 
-train_params = {
+obj_classifier_train_params = {
     'out_dir': '/home/tanmay/Code/GenVQA/Exp_Results/Obj_Classifier',
     'adam_lr': 0.001,
     'train_json': '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/train_anno.json',
     'image_dir': '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/images',
 }
 
-eval_params = {
+obj_classifier_eval_params = {
     'out_dir': '/home/tanmay/Code/GenVQA/Exp_Results/Obj_Classifier',
     'model_name': '/home/tanmay/Code/GenVQA/Exp_Results/Obj_Classifier/obj_classifier',
     'global_step': 1,
     'test_json': '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/test_anno.json',
     'image_dir': '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/images',
     'html_dir': '/home/tanmay/Code/GenVQA/Exp_Results/Obj_Classifier/html_dir',
-    'create_graph': False,
+}
+
+atr_classifier_train_params = {
+    'out_dir': '/home/tanmay/Code/GenVQA/Exp_Results/Atr_Classifier',
+    'adam_lr': 0.001,
+    'train_json': '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/train_anno.json',
+    'image_dir': '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/images',
+    'obj_model_name': obj_classifier_eval_params['model_name'],
+    'obj_global_step': 1,
+}
+
+atr_classifier_eval_params = {
+    'out_dir': '/home/tanmay/Code/GenVQA/Exp_Results/Atr_Classifier',
+    'model_name': '/home/tanmay/Code/GenVQA/Exp_Results/Atr_Classifier/atr_classifier',
+    'global_step': 1,
+    'test_json': '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/test_anno.json',
+    'image_dir': '/home/tanmay/Code/GenVQA/GenVQA/shapes_dataset/images',
+    'html_dir': '/home/tanmay/Code/GenVQA/Exp_Results/Atr_Classifier/html_dir',
 }
 
 if __name__=='__main__':
     if workflow['train_obj']:
-        obj_trainer.train(train_params)
+        obj_trainer.train(obj_classifier_train_params)
  
-    obj_feat = tf.get_collection('obj_feat', scope='obj/conv2')
-    print(obj_feat)
     if workflow['eval_obj']:
-        obj_evaluator.eval(eval_params)
+        obj_evaluator.eval(obj_classifier_eval_params)
+
+    if workflow['train_atr']:
+        atr_trainer.train(atr_classifier_train_params)
 
+    if workflow['eval_atr']:
+        atr_evaluator.eval(atr_classifier_eval_params)