基因表达预测:从 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)