StructDiff 是一个基于扩散模型的肽段生成框架,通过整合序列和结构信息来生成高质量的功能性肽段。该模型结合了以下创新点:
# 克隆项目
git clone https://github.com/cihebi2/StructDiff.git
cd StructDiff
# 创建 Conda 环境
conda env create -f environment.yml
# 激活环境
conda activate structdiff
# 安装项目
pip install -e .
# 克隆项目
git clone https://github.com/cihebi2/StructDiff.git
cd StructDiff
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 安装项目
pip install -e .
# 测试导入
python -c "import structdiff; print('StructDiff installed successfully')"
# 运行测试
pytest tests/
# 下载预训练的 StructDiff 模型
# wget https://example.com/structdiff_pretrained.pth -O checkpoints/structdiff_pretrained.pth
# 使用预训练模型生成肽段
python scripts/generate.py \
--checkpoint checkpoints/structdiff_pretrained.pth \
--num_samples 100 \
--output generated_peptides.fasta
from structdiff import StructDiff, GaussianDiffusion
from structdiff.utils import load_config
# 加载配置
config = load_config("configs/default.yaml")
# 创建模型
model = StructDiff(config)
diffusion = GaussianDiffusion(config.diffusion)
# 生成肽段
samples = model.sample(
batch_size=10,
seq_length=20,
conditions={"peptide_type": "antimicrobial"}
)
StructDiff 支持以下输入格式:
>peptide_001|antimicrobial
ACDEFGHIKLMNPQRSTVWY
>peptide_002|antifungal
WYTVRSQPNMLKIHGFEDCA
id,sequence,peptide_type
peptide_001,ACDEFGHIKLMNPQRSTVWY,antimicrobial
peptide_002,WYTVRSQPNMLKIHGFEDCA,antifungal
# 预处理肽段数据
python scripts/preprocess.py \
--input data/raw/peptides.fasta \
--output_dir data/processed \
--min_length 5 \
--max_length 50 \
--split_ratios 0.8 0.1 0.1
# 使用默认配置训练
python scripts/train.py \
--config configs/default.yaml \
--data_dir data/processed
# 自定义训练参数
python scripts/train.py \
--config configs/default.yaml \
--model.hidden_dim 1024 \
--training.num_epochs 200 \
--training.batch_size 64 \
--training.lr 5e-5 \
--diffusion.num_timesteps 1000
# 生成肽段
python scripts/generate.py \
--checkpoint checkpoints/best_model.pth \
--num_samples 1000 \
--output results/generated_peptides.fasta
# 生成特定类型的肽段
python scripts/generate.py \
--checkpoint checkpoints/best_model.pth \
--num_samples 500 \
--peptide_type antimicrobial \
--min_length 10 \
--max_length 30 \
--output results/antimicrobial_peptides.fasta
# 使用分类器自由引导
python scripts/generate.py \
--checkpoint checkpoints/best_model.pth \
--num_samples 200 \
--guidance_scale 2.0 \
--peptide_type antimicrobial \
--output results/cfg_peptides.fasta
# 评估生成的肽段
python scripts/evaluate.py \
--generated results/generated_peptides.fasta \
--reference data/test.csv \
--output results/evaluation_report.json
# 包含结构和功能评估
python scripts/evaluate.py \
--generated results/generated_peptides.fasta \
--reference data/test.csv \
--predict_structure \
--compute_properties \
--output results/detailed_evaluation.json
在配置文件中启用 CFG:
diffusion:
guidance_scale: 2.0
use_cfg: true
model:
use_classifier_free_guidance: true
cfg_dropout_rate: 0.1
generation:
length_control:
enabled: true
min_length: 8
max_length: 40
length_distribution: "uniform" # uniform, normal, exponential
model:
hidden_dim: 768
num_layers: 12
num_heads: 12
max_seq_length: 512
use_structure_features: true
structure_dim: 256
training:
batch_size: 32
num_epochs: 100
learning_rate: 5e-5
weight_decay: 0.01
warmup_steps: 1000
gradient_clipping: 1.0
diffusion:
num_timesteps: 1000
beta_schedule: "cosine"
loss_type: "mse"
noise_schedule: "cosine"
主要的模型类,负责肽段生成。
class StructDiff(nn.Module):
def __init__(self, config):
"""初始化 StructDiff 模型"""
def forward(self, x, t, conditions=None):
"""前向传播"""
def sample(self, batch_size, seq_length, conditions=None):
"""生成肽段序列"""
扩散模型的实现。
class GaussianDiffusion:
def __init__(self, config):
"""初始化扩散过程"""
def p_sample_loop(self, model, shape, conditions=None):
"""采样循环"""
from structdiff.utils import (
load_config,
save_sequences,
compute_metrics,
visualize_results
)
A: 尝试以下方法:
--training.batch_size 16--training.gradient_accumulation_steps 4--training.use_amp trueA: 可以尝试:
A: 支持标准的 20 种氨基酸: ACDEFGHIKLMNPQRSTVWY
#!/bin/bash
# train_pipeline.sh
# 数据预处理
python scripts/preprocess.py \
--input data/raw/peptides.fasta \
--output_dir data/processed
# 训练模型
python scripts/train.py \
--config configs/default.yaml \
--data_dir data/processed \
--experiment_name "my_experiment"
# 生成肽段
python scripts/generate.py \
--checkpoint outputs/my_experiment/checkpoints/best.pth \
--num_samples 1000 \
--output results/generated.fasta
# 评估结果
python scripts/evaluate.py \
--generated results/generated.fasta \
--reference data/processed/test.csv \
--output results/evaluation.json
# run_experiments.py
import itertools
import subprocess
# 定义超参数网格
param_grid = {
'hidden_dim': [512, 768, 1024],
'lr': [1e-4, 5e-5],
'guidance_scale': [1.0, 2.0, 3.0]
}
# 运行实验
for params in itertools.product(*param_grid.values()):
hidden_dim, lr, guidance_scale = params
cmd = [
"python", "scripts/train.py",
"--config", "configs/default.yaml",
"--model.hidden_dim", str(hidden_dim),
"--training.lr", str(lr),
"--diffusion.guidance_scale", str(guidance_scale)
]
subprocess.run(cmd)
# 启用 Flash Attention(如果可用)
export FLASH_ATTENTION=1
# 使用混合精度训练
python scripts/train.py \
--config configs/default.yaml \
--training.use_amp true
# 多 GPU 训练
python -m torch.distributed.launch \
--nproc_per_node=4 \
scripts/train.py \
--config configs/default.yaml
欢迎对 StructDiff 做出贡献!请查看 CONTRIBUTING.md 了解详情。
如果您在研究中使用了 StructDiff,请引用:
@article{structdiff2024,
title={StructDiff: Structure-Aware Diffusion Model for Peptide Generation},
author={StructDiff Team},
journal={bioRxiv},
year={2024}
}
本项目采用 MIT 许可证。详见 LICENSE 文件。
docs/ 目录中的完整文档StructDiff 是一个基于扩散模型的肽段生成框架,通过整合序列和结构信息来生成高质量的功能性肽段。该模型结合了以下创新点:
# 克隆项目
git clone https://github.com/cihebi2/StructDiff.git
cd StructDiff
# 创建 Conda 环境
conda env create -f environment.yml
# 激活环境
conda activate structdiff
# 安装项目
pip install -e .
# 克隆项目
git clone https://github.com/cihebi2/StructDiff.git
cd StructDiff
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 安装项目
pip install -e .
# 测试导入
python -c "import structdiff; print('StructDiff installed successfully')"
# 运行测试
pytest tests/
# 下载预训练的 StructDiff 模型
# wget https://example.com/structdiff_pretrained.pth -O checkpoints/structdiff_pretrained.pth
# 使用预训练模型生成肽段
python scripts/generate.py \
--checkpoint checkpoints/structdiff_pretrained.pth \
--num_samples 100 \
--output generated_peptides.fasta
from structdiff import StructDiff, GaussianDiffusion
from structdiff.utils import load_config
# 加载配置
config = load_config("configs/default.yaml")
# 创建模型
model = StructDiff(config)
diffusion = GaussianDiffusion(config.diffusion)
# 生成肽段
samples = model.sample(
batch_size=10,
seq_length=20,
conditions={"peptide_type": "antimicrobial"}
)
StructDiff 支持以下输入格式:
>peptide_001|antimicrobial
ACDEFGHIKLMNPQRSTVWY
>peptide_002|antifungal
WYTVRSQPNMLKIHGFEDCA
id,sequence,peptide_type
peptide_001,ACDEFGHIKLMNPQRSTVWY,antimicrobial
peptide_002,WYTVRSQPNMLKIHGFEDCA,antifungal
# 预处理肽段数据
python scripts/preprocess.py \
--input data/raw/peptides.fasta \
--output_dir data/processed \
--min_length 5 \
--max_length 50 \
--split_ratios 0.8 0.1 0.1
# 使用默认配置训练
python scripts/train.py \
--config configs/default.yaml \
--data_dir data/processed
# 自定义训练参数
python scripts/train.py \
--config configs/default.yaml \
--model.hidden_dim 1024 \
--training.num_epochs 200 \
--training.batch_size 64 \
--training.lr 5e-5 \
--diffusion.num_timesteps 1000
# 生成肽段
python scripts/generate.py \
--checkpoint checkpoints/best_model.pth \
--num_samples 1000 \
--output results/generated_peptides.fasta
# 生成特定类型的肽段
python scripts/generate.py \
--checkpoint checkpoints/best_model.pth \
--num_samples 500 \
--peptide_type antimicrobial \
--min_length 10 \
--max_length 30 \
--output results/antimicrobial_peptides.fasta
# 使用分类器自由引导
python scripts/generate.py \
--checkpoint checkpoints/best_model.pth \
--num_samples 200 \
--guidance_scale 2.0 \
--peptide_type antimicrobial \
--output results/cfg_peptides.fasta
# 评估生成的肽段
python scripts/evaluate.py \
--generated results/generated_peptides.fasta \
--reference data/test.csv \
--output results/evaluation_report.json
# 包含结构和功能评估
python scripts/evaluate.py \
--generated results/generated_peptides.fasta \
--reference data/test.csv \
--predict_structure \
--compute_properties \
--output results/detailed_evaluation.json
在配置文件中启用 CFG:
diffusion:
guidance_scale: 2.0
use_cfg: true
model:
use_classifier_free_guidance: true
cfg_dropout_rate: 0.1
generation:
length_control:
enabled: true
min_length: 8
max_length: 40
length_distribution: "uniform" # uniform, normal, exponential
model:
hidden_dim: 768
num_layers: 12
num_heads: 12
max_seq_length: 512
use_structure_features: true
structure_dim: 256
training:
batch_size: 32
num_epochs: 100
learning_rate: 5e-5
weight_decay: 0.01
warmup_steps: 1000
gradient_clipping: 1.0
diffusion:
num_timesteps: 1000
beta_schedule: "cosine"
loss_type: "mse"
noise_schedule: "cosine"
主要的模型类,负责肽段生成。
class StructDiff(nn.Module):
def __init__(self, config):
"""初始化 StructDiff 模型"""
def forward(self, x, t, conditions=None):
"""前向传播"""
def sample(self, batch_size, seq_length, conditions=None):
"""生成肽段序列"""
扩散模型的实现。
class GaussianDiffusion:
def __init__(self, config):
"""初始化扩散过程"""
def p_sample_loop(self, model, shape, conditions=None):
"""采样循环"""
from structdiff.utils import (
load_config,
save_sequences,
compute_metrics,
visualize_results
)
A: 尝试以下方法:
--training.batch_size 16--training.gradient_accumulation_steps 4--training.use_amp trueA: 可以尝试:
A: 支持标准的 20 种氨基酸: ACDEFGHIKLMNPQRSTVWY
#!/bin/bash
# train_pipeline.sh
# 数据预处理
python scripts/preprocess.py \
--input data/raw/peptides.fasta \
--output_dir data/processed
# 训练模型
python scripts/train.py \
--config configs/default.yaml \
--data_dir data/processed \
--experiment_name "my_experiment"
# 生成肽段
python scripts/generate.py \
--checkpoint outputs/my_experiment/checkpoints/best.pth \
--num_samples 1000 \
--output results/generated.fasta
# 评估结果
python scripts/evaluate.py \
--generated results/generated.fasta \
--reference data/processed/test.csv \
--output results/evaluation.json
# run_experiments.py
import itertools
import subprocess
# 定义超参数网格
param_grid = {
'hidden_dim': [512, 768, 1024],
'lr': [1e-4, 5e-5],
'guidance_scale': [1.0, 2.0, 3.0]
}
# 运行实验
for params in itertools.product(*param_grid.values()):
hidden_dim, lr, guidance_scale = params
cmd = [
"python", "scripts/train.py",
"--config", "configs/default.yaml",
"--model.hidden_dim", str(hidden_dim),
"--training.lr", str(lr),
"--diffusion.guidance_scale", str(guidance_scale)
]
subprocess.run(cmd)
# 启用 Flash Attention(如果可用)
export FLASH_ATTENTION=1
# 使用混合精度训练
python scripts/train.py \
--config configs/default.yaml \
--training.use_amp true
# 多 GPU 训练
python -m torch.distributed.launch \
--nproc_per_node=4 \
scripts/train.py \
--config configs/default.yaml
欢迎对 StructDiff 做出贡献!请查看 CONTRIBUTING.md 了解详情。
如果您在研究中使用了 StructDiff,请引用:
@article{structdiff2024,
title={StructDiff: Structure-Aware Diffusion Model for Peptide Generation},
author={StructDiff Team},
journal={bioRxiv},
year={2024}
}
本项目采用 MIT 许可证。详见 LICENSE 文件。
docs/ 目录中的完整文档