在Colab中用TensorFlow运行Uniprot ProtNLM报错:run_inference未定义
修复ProtNLM Colab笔记本中
run_inference未定义的NameError问题 1. 补全缺失的run_inference函数定义
官方Colab试用笔记本未包含该自定义推理函数的实现,需手动添加以下适配TensorFlow 2.x版本的代码到笔记本中(基于ProtNLM官方推理逻辑):
import tensorflow as tf from tensorflow.keras.models import load_model def run_inference(protein_sequences, model_path, max_seq_len=1024): # 氨基酸映射表(匹配ProtNLM的预训练输入规范) aa_vocab = {'A':1, 'C':2, 'D':3, 'E':4, 'F':5, 'G':6, 'H':7, 'I':8, 'K':9, 'L':10, 'M':11, 'N':12, 'P':13, 'Q':14, 'R':15, 'S':16, 'T':17, 'V':18, 'W':19, 'Y':20, '<PAD>':0, '<UNK>':21} def preprocess_sequence(seq): # 截断或填充序列至模型要求的最大长度 truncated_seq = seq[:max_seq_len] padded_seq = truncated_seq.ljust(max_seq_len, '<PAD>') # 转换为模型可识别的索引序列 return tf.convert_to_tensor([aa_vocab.get(residue, aa_vocab['<UNK>']) for residue in padded_seq], dtype=tf.int32) # 加载预训练模型 model = load_model(model_path, compile=False) # 批量处理输入序列 processed_inputs = tf.stack([preprocess_sequence(seq) for seq in protein_sequences]) # 执行推理并返回结果 return model.predict(processed_inputs)
2. 适配TensorFlow版本兼容问题
- 若加载的是基于TensorFlow 1.x训练的旧版ProtNLM模型,需在模型加载时添加兼容参数:
model = tf.keras.models.load_model(model_path, compile=False, custom_objects={'tf': tf.compat.v1}) - 若遇到 eager execution 相关报错,可在函数开头添加:
tf.compat.v1.disable_eager_execution()
3. 正确调用推理函数
在原代码的推理调用处,传入合法参数即可:
# 示例:批量处理蛋白序列 protein_seqs = ["MAKGEELFTGVVPILVELDGDVNGHKFSVRGEGEGDATNGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKQHDFFKSAMPEGYVQERTIFFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYIMADKQKNGIKVNFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK", "MSEGEQLAK"] model_path = "/content/protnlm_pretrained_model.h5" protein_descriptors = run_inference(protein_seqs, model_path)
内容的提问来源于stack exchange,提问作者lunchbox7804
相关产品推荐
相关产品推荐

