from basepair.imports import *
create_tf_session(2,3)
model_dir = Path(f"{ddir}/processed/chipnexus/exp/models/oct-sox-nanog-klf/models/n_dil_layers=9/")
bpnet = BPNetPredictor.from_mdir(model_dir)
from concise.preprocessing import encodeDNA
from basepair.plot.tracks import plot_tracks, filter_tracks
from basepair.exp.chipnexus.simulate import generate_seq, postproc, average_profiles, flatten
onehot = encodeDNA([generate_seq("ATTTGCATAACAAAG", seqlen=1000)])
onehot = np.array([onehot, onehot]).squeeze()
onehot.shape
bpnet.imp_score(onehot, 'Oct4', method="grad", pred_summary='weighted')[0] * onehot[0]
bpnet.imp_score(onehot, 'Oct4', method="grad", pred_summary='count')[0] * onehot[0]
bpnet.imp_score(onehot, 'Oct4', method="ism", pred_summary='weighted')[0] * onehot[0]
bpnet.imp_score(onehot, 'Oct4', method="ism", pred_summary='count')[0] * onehot[0]
bpnet.imp_score(onehot, 'Oct4', method="deeplift", pred_summary='weighted')[0] * onehot[0]
# running again: should see no messages from DeepExplain
bpnet.imp_score(onehot, 'Oct4', method="deeplift", pred_summary='weighted')[0] * onehot[0]
# running on 'count': should see no messages from DeepExplain
bpnet.imp_score(onehot, 'Oct4', method="deeplift", pred_summary='count')[0] * onehot[0]
# grad stopped working since deeplift messes up with the tensorflow graph. Is there a way to keep them separate?
bpnet.imp_score(onehot, 'Oct4', method="grad", pred_summary='weighted')[0] * onehot[0]
Old code had a bug in which all the importance scores had the same function cache
k = f"{strand}/{task_id}/{pred_summary}"
if k in self.grad_fns:
return self.grad_fns[k]
I updated it to:
k = f"ism/{strand}/{task_id}/{pred_summary}"
if k in self.grad_fns:
return self.grad_fns[k]
imp_scores = {method: bpnet.imp_score(onehot, 'Oct4', method=method, pred_summary='weighted')[0] * onehot[0]
for method in ['grad', 'deeplift', 'ism']}
plot_tracks(filter_tracks(imp_scores, [400, 600]));
imp_scores = {method: bpnet.imp_score(onehot, 'Oct4', method=method, pred_summary='count')[0] * onehot[0]
for method in ['grad', 'deeplift', 'ism']}
plot_tracks(filter_tracks(imp_scores, [400, 600]));