import keras
import pyBigWig
import matplotlib.pyplot as plt
from concise.preprocessing import encodeDNA
from concise.utils.fasta import read_fasta
from pybedtools import BedTool
from tqdm import tqdm
import pandas as pd
import numpy as np
from basepair.config import get_data_dir, create_tf_session
from basepair.datasets import get_sox2_data, seq_inp_exo_out
from basepair.math import softmax
from basepair.losses import twochannel_multinomial_nll
import basepair as bp
from basepair.layers import SpatialLifetimeSparsity
from basepair.plots import *
ddir = get_data_dir()
import keras.layers as kl
from keras.optimizers import Adam
from keras.callbacks import EarlyStopping, ModelCheckpoint, History
from keras.models import Model, load_model
def get_model(mfn, mkwargs):
"""Get the model"""
import datetime
mdir = f"{ddir}/processed/chipnexus/exp/models/wta-ae"
name = mfn + "_" + \
",".join([f'{k}={v}' for k,v in mkwargs.items()]) + \
"." + str(datetime.datetime.now()).replace(" ", "::")
!mkdir -p {mdir}
ckp_file = f"{mdir}/{name}.h5"
return eval(mfn)(**mkwargs), name, ckp_file
create_tf_session(1)
keras.backend.get_session().list_devices()
dfc = get_sox2_data()
train, valid, test = seq_inp_exo_out()
[x.shape for x in train]
dfc.head(2)
from basepair.models import seq_dense, seq_dense_wta, wta_ae
# hyper-parameters
mfn = "seq_dense_wta"
mkwargs = dict(filters=21,
conv1_kernel_size=25,
tconv_kernel_size=25,
n_dil_layers=6,
wta_lifetime_rate=1.0,
n_bottleneck=10,
#use_seq=True,
lr=0.004)
# best valid so far: 108238.6558
model, name, ckp_file = get_model(mfn, mkwargs)
history = model.fit({"seq": train[0], "chip_nexus": train[1]}, train[1],
batch_size=256,
epochs=5,
validation_split=0.2,
callbacks=[EarlyStopping(patience=20),
History(),
ModelCheckpoint(ckp_file, save_best_only=True)]
)
# get the best model
model = load_model(ckp_file, custom_objects={"twochannel_multinomial_nll": twochannel_multinomial_nll,
"SpatialLifetimeSparsity": SpatialLifetimeSparsity})
dfh = pd.DataFrame(history.history)
model.history
p = Seq2NexusTrack({"seq": train[0], "chip_nexus": train[1]}, #train[1], #
train[1], model)
p.plot()
p = Seq2NexusTrack({"seq": test[0], "chip_nexus": test[1]},
test[1], model)
p.plot(sort='top')
p = CAENexus({"seq": test[0], "chip_nexus": test[1]},
test[1], test[2], model)
p.plot(10, sort='top', bottleneck_type='after', show_seq=True)
deconv_filters(model, figsize=(15, 4), ncol=5)
a = model.evaluate(test[0], test[1])
a