Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
###### related DIRs on CNS to store results #######
discovered_concepts_dir = os.path.join(args.working_dir, 'concepts/')
results_dir = os.path.join(args.working_dir, 'results/')
cavs_dir = os.path.join(args.working_dir, 'cavs/')
activations_dir = os.path.join(args.working_dir, 'acts/')
results_summaries_dir = os.path.join(args.working_dir, 'results_summaries/')
if tf.gfile.Exists(args.working_dir):
tf.gfile.DeleteRecursively(args.working_dir)
tf.gfile.MakeDirs(args.working_dir)
tf.gfile.MakeDirs(discovered_concepts_dir)
tf.gfile.MakeDirs(results_dir)
tf.gfile.MakeDirs(cavs_dir)
tf.gfile.MakeDirs(activations_dir)
tf.gfile.MakeDirs(results_summaries_dir)
random_concept = 'random_discovery' # Random concept for statistical testing
sess = utils.create_session()
mymodel = ace_helpers.make_model(
sess, args.model_to_run, args.model_path, args.labels_path)
# Creating the ConceptDiscovery class instance
cd = ConceptDiscovery(
mymodel,
args.target_class,
random_concept,
args.bottlenecks.split(','),
sess,
args.source_dir,
activations_dir,
cavs_dir,
num_random_exp=args.num_random_exp,
channel_mean=True,
max_imgs=args.max_imgs,
min_imgs=args.min_imgs,
Args:
c: conept name
r: random concept name
bn: the layer name
act_c: activation matrix of the concept in the 'bn' layer
ow: overwrite if CAV already exists
directory: to save the generated CAV
Returns:
The accuracy of the CAV
"""
if directory is None:
directory = self.cav_dir
act_r = self._random_concept_activations(bn, r)
cav_instance = cav.get_or_train_cav([c, r],
bn, {
c: {
bn: act_c
},
r: {
bn: act_r
}
},
cav_dir=directory,
overwrite=ow)
return cav_instance.accuracies['overall']
Args:
c: concept name
r: random concept name
bn: bottleneck layer
directory: where CAV is saved
Returns:
The cav instance
"""
if directory is None:
directory = self.cav_dir
params = tf.contrib.training.HParams(model_type='linear', alpha=.01)
cav_key = cav.CAV.cav_key([c, r], bn, params.model_type, params.alpha)
cav_path = os.path.join(self.cav_dir, cav_key.replace('/', '.') + '.pkl')
vector = cav.CAV.load_cav(cav_path).cavs[0]
return np.expand_dims(vector, 0) / np.linalg.norm(vector, ord=2)
def load_cav_direction(self, c, r, bn, directory=None):
"""Loads an already computed cav.
Args:
c: concept name
r: random concept name
bn: bottleneck layer
directory: where CAV is saved
Returns:
The cav instance
"""
if directory is None:
directory = self.cav_dir
params = tf.contrib.training.HParams(model_type='linear', alpha=.01)
cav_key = cav.CAV.cav_key([c, r], bn, params.model_type, params.alpha)
cav_path = os.path.join(self.cav_dir, cav_key.replace('/', '.') + '.pkl')
vector = cav.CAV.load_cav(cav_path).cavs[0]
return np.expand_dims(vector, 0) / np.linalg.norm(vector, ord=2)
model_path: Path to models saved graph.
randomize: Start with random weights
labels_path: Path to models line separated class names text file.
Returns:
a model instance.
Raises:
ValueError: If model name is not valid.
"""
if model_to_run == 'InceptionV3':
mymodel = model.InceptionV3Wrapper_public(
sess, model_saved_path=model_path, labels_path=labels_path)
elif model_to_run == 'GoogleNet':
# common_typos_disable
mymodel = model.GoolgeNetWrapper_public(
sess, model_saved_path=model_path, labels_path=labels_path)
else:
raise ValueError('Invalid model name')
if randomize: # randomize the network!
sess.run(tf.global_variables_initializer())
return mymodel
Args:
sess: tf session instance.
model_to_run: a string that describes which model to make.
model_path: Path to models saved graph.
randomize: Start with random weights
labels_path: Path to models line separated class names text file.
Returns:
a model instance.
Raises:
ValueError: If model name is not valid.
"""
if model_to_run == 'InceptionV3':
mymodel = model.InceptionV3Wrapper_public(
sess, model_saved_path=model_path, labels_path=labels_path)
elif model_to_run == 'GoogleNet':
# common_typos_disable
mymodel = model.GoolgeNetWrapper_public(
sess, model_saved_path=model_path, labels_path=labels_path)
else:
raise ValueError('Invalid model name')
if randomize: # randomize the network!
sess.run(tf.global_variables_initializer())
return mymodel