Downloads · 30 days
82
31% of all-time downloads
ae-314/promoter-gpt-ft-tata
promoter-gpt-ft-tata is a text generation model from ae-314. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as cc-by-3.0.
This is a fine-tuned (human TATA/no-TATA) model of adehoffer/Promoter-GPT-model for generating synthetic promoter sequences.
Downloads · 30 days
82
31% of all-time downloads
All-time downloads
262
Public
Parameters
444K
1.8 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors1.8 MB · 99%
From the Hugging Face model README
This is a fine-tuned (human TATA/no-TATA) model of adehoffer/Promoter-GPT-model for generating synthetic promoter sequences.
This is a fine-tuned model of Adele de Hoffer's Promoter-GPT-model for generating synthetic promoter sequences. I trained my own base model of Promoter-GPT following Adele's guide here: https://huggingface.co/blog/hugging-science/promoter-gpt and then loaded and fine-tuned that model on InstaDeepAI/nucleotide_transformer_downstream_tasks_revised TATA/noTATA human promoter sequence datasets.
This model generates synthetic promoter sequences given a seed.
Disclaimer: Research use only; not for clinical or commercial use. Sequences require wet-lab validation—no direct improvement over the base model is claimed.
This is the model card of a 🤗 transformers model that has been pushed on the Hub. This model card has been automatically generated.
promoter_tata + promoter_no_tata (positives), balancedn_positions=298)#aaron e
# ae-314
from transformers import GPT2LMHeadModel, PreTrainedTokenizerFast
import torch, re
# Load model & tokenizer
repo_id = "ae-314/promoter-gpt-ft-tata"
tok = PreTrainedTokenizerFast.from_pretrained(repo_id)
model = GPT2LMHeadModel.from_pretrained(repo_id).eval()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
# K-mer helpers
def kmerize(seq, k=3):
return " ".join(seq[i:i+k] for i in range(len(seq)-k+1))
def dekmerize_ids(ids, k=3):
toks = tok.convert_ids_to_tokens(ids)
kmers = [t for t in toks if re.fullmatch(r"[ACGT]{%d}" % k, t)]
if not kmers: return ""
seq = kmers[0]
for t in kmers[1:]:
seq += t[-1]
return seq
# Generate N sequences (unconditional)
def generate_batch(seed="ATGG", N=50, k=3, temperature=0.9, top_p=0.9):
inp = tok.encode(kmerize(seed, k), return_tensors="pt").to(device)
max_new = 298 - inp.shape[1] # 300 bp -> 298 3-mers
assert max_new > 0, f"Seed too long in k-mer tokens ({inp.shape[1]})"
pad_id = tok.pad_token_id if tok.pad_token_id is not None else (tok.eos_token_id or 0)
with torch.no_grad():
outs = model.generate(
inp,
max_new_tokens=max_new,
do_sample=True, temperature=temperature, top_p=top_p,
num_return_sequences=N,
pad_token_id=pad_id
)
return [dekmerize_ids(outs[i].tolist(), k) for i in range(outs.shape[0])]
# Run and show first 5
seqs = generate_batch(seed="ATGG", N=50)
for i, s in enumerate(seqs[:5], 1):
print(f"{i:02d}: {s}")