2 个版本
0.1.3 | 2020 年 12 月 3 日 |
---|---|
0.1.0 | 2020 年 11 月 28 日 |
#505 in 科学
33KB
363 行
用于深度学习的基因组注释数据集构建管道
这是一个从 Rust 中的基因组区域和注释创建 HDF5 输入到 Keras 的管道。它是 Basset 的预处理管道的(某种程度上)直接替代品,旨在将 BED 文件列表转换为用于深度学习模型的注释 one-hot 编码序列。两个管道的输入和输出应相似,但这个管道对于大数据集来说要快得多。
要安装,请使用 cargo
,或者从源代码构建。
cargo install genomic_interval_pipeline
从源代码构建
确保您已经在系统上安装了 cargo
和 Rust,然后克隆此仓库。
git clone [email protected]:Chris1221/genomic_interval_pipeline.rs.git
cd genomic_interval_pipeline.rs
使用 cargo
构建可执行文件。它应该会为您找出所有依赖项。
cargo build --release
二进制文件将在 target/release/genomic_interval_pipeline
中。
用法
您必须提供
- 以换行符分隔的 gzipped BED 文件列表。
- 参考基因组的路径。这必须使用
bgzip
压缩,并使用samtools faidx
索引。
第一个的示例可以在 data/metadata.txt
中找到
data/file1.bed.gz
data/file2.bed.gz
创建相关的参考基因组很简单。
- 下载您选择的参考基因组,例如 hg19。这里,我只是使用了 UCSC 基因组浏览器。
wget https://hgdownload.soe.ucsc.edu/goldenPath/hg19/bigZips/hg19.fa.gz
- 使用
bgzip
压缩您的参考基因组(如果已经这样做,请跳过此步骤。)
gunzip hg19.fa.gz
bgzip hg19.fa
- 使用
samtools
索引。
samtools faidx hg19.fa.gz
运行管道
使用 BED 文件元数据的路径和参考基因组的路径调用二进制文件(您不必指定索引的位置)。
genomic_interval_pipeline -i data/metadata.txt -f hg19.fa.gz -o small_dataset
这将创建您的数据集在 small_dataset.h5
。
参数
短 | 长 | 值 | 描述 |
---|---|---|---|
-i |
--input |
字符串 | 处理床文件的新行分隔列表的路径。 |
-f |
--fastq |
字符串 | faidx索引的,bgzip 压缩的参考FASTQ文件的路径 |
-o |
--output |
字符串 | 输出.h5 文件的路径。 |
-m |
--min_overlap |
数字 | 合并段所需的最小重叠数(默认:200 ) |
-e |
--exclusive |
布尔值 | 执行多类学习而不是多标签学习(即排除多个细胞类型注释的情况,只写入唯一值)(默认:false ) |
--length |
数字 | 区域的标准化长度(默认:600 ) |
|
--test_chr |
字符串 | 测试集中使用的染色体列表,用逗号分隔(默认:chr19,chr20 ) |
|
--valid_chr |
字符串 | 验证集中使用的染色体列表,用逗号分隔(默认:chr21,chr22 ) |
|
--loglevel |
字符串 | 日志级别(默认:info ) |
数据集格式
HDF5文件实际上是数据目录。数据集内有六个表格,对应于训练、测试和验证序列及其标签。
序列是3维数组,维度为(batch, length, 4)
,其中length在构建数据集时可选,表示段的标准化长度。
标签是2维数组,维度为(batch, number_of_labels)
,其中number_of_labels是元数据文件的长度。您可以在HDF5
文件中轻松重新编码此数据集以获得更定制的训练输出。
非标准标签
标签按顺序分配给bed文件(如SQL表中的序列号),然而此行为可以被覆盖。您可能有一个由空格分隔的两列元数据文件,而不是一个列的元数据文件。该文件的第二列是该文件的数字标签。
path/to/file1.bed.gz numeric_label_1
path/to/file2/bed.gz numeric_label_2
请参阅data/metadata_custom.txt
中的示例。
在Keras
中使用数据集
您可以使用TensorFlow I/O API将此数据用于您自己的神经网络。以下是一个Python示例。
import tensorflow as tf
import tensorflow_io as tfio
dataset = "small_dataset.h5"
train_x = tfio.Dataset.from_hdf5(dataset, "training_sequences")
train_y = tfio.Dataset.from_hdf5(dataset, "training_labels")
train_dataset = tf.data.Dataset.zip((train_x, train_y))
将此train_dataset
(以及类似地测试和验证)传递给model.fit
。
依赖关系
~18–28MB
~461K SLoC