基因表达预测:从 DNA 序列到转录组的深度学习模型

FreeGuideOnline 最新 2026-06-26

bash pip install tensorflow numpy pandas


#### 2. 序列编码
将 ATCG 序列使用 one‑hot 或 k‑mer 编码。这里使用 one‑hot,长度为 200,000 bp 的序列编码为 `(200000, 4)` 的矩阵。
```python
import numpy as np

def one_hot_encode(seq):
    mapping = {'A':0, 'C':1, 'G':2, 'T':3}
    return np.eye(4)[[mapping[base] for base in seq]]

# 示例:随机生成一段序列和模拟表达值(仅作演示)
seq_len = 200000
X = np.random.rand(128, seq_len, 4)  # 假设128个样本
y = np.random.rand(128, 1)  # 回归目标

3. 构建模型

使用 1D 卷积提取特征,叠加自注意力捕获长程关系,最后全局平均池化用于序列级别的表达预测。

import tensorflow as tf
from tensorflow.keras import layers, Model

def create_enformer_lite(seq_len=200000, embedding_dim=256):
    seq_input = layers.Input(shape=(seq_len, 4))
    
    # 卷积 stem
    x = layers.Conv1D(embedding_dim, kernel_size=17, padding='same')(seq_input)
    x = layers.BatchNormalization()(x)
    x = layers.ReLU()(x)
    
    # 一个简化的 Transformer block(多头自注意力 + 前馈网络)
    attn_out = layers.MultiHeadAttention(num_heads=8, key_dim=embedding_dim//8)(x, x)
    x = layers.Add()([x, attn_out])
    x = layers.LayerNormalization()(x)
    
    ffn = layers.Conv1D(embedding_dim*2, 1, activation='relu')(x)
    ffn = layers.Conv1D(embedding_dim, 1)(ffn)
    x = layers.Add()([x, ffn])
    x = layers.LayerNormalization()(x)
    
    # 池化与输出
    x = layers.GlobalAveragePooling1D()(x)
    output = layers.Dense(1)(x)  # 预测单一基因表达值
    
    model = Model(inputs=seq_input, outputs=output)
    model.compile(optimizer='adam', loss='mse', metrics=['mae'])
    return model

model = create_enformer_lite()
model.summary()

4. 训练与评估

history = model.fit(X, y, validation_split=0.1, epochs=10, batch_size=8)