Skip to content

Latest commit

 

History

History
187 lines (152 loc) · 7.93 KB

README.md

File metadata and controls

187 lines (152 loc) · 7.93 KB

No Maintenance Intended TensorFlow Requirement: 1.x TensorFlow 2 Not Supported

Seq2Species: Neural Network Models for Species Classification

A deep learning solution for read-level taxonomic classification with 16s.

Recent improvements in sequencing technology have made possible large, public databases of biological sequencing data, bringing about new data richness for many important problems in bioinformatics. However, this growing availability of data creates a need for analysis methods capable of efficiently handling these large sequencing datasets. We on the Genomics team in Google Brain are particularly interested in the class of problems which can be framed as assigning meaningful labels to short biological sequences, and are exploring the possiblity of creating a general deep learning solution for solving this class of sequence-labeling problems. We are excited to share our initial progress in this direction by releasing Seq2Species, an open-source neural network framework for TensorFlow for predicting read-level taxonomic labels from genomic sequence. Our release includes all the code necessary to train new Seq2Species models.

About Seq2Species

Briefly, Seq2Species provides a framework for training deep neural networks to predict database-derived labels directly from short reads of DNA. Thus far, our research has focused predominantly on demonstrating the value of this deep learning approach on the problem of determining the species of origin of next-generation sequencing reads from 16S ribosomal DNA. We used this Seq2Species framework to train depthwise separable convolutional neural networks on short subsequences from the 16S genes of more than 13 thousand distinct species. The resulting classification model assign species-level probabilities to individual 16S reads.

For more information about the use cases we have explored, or for technical details describing how Seq2Species work, please see our preprint.

Installation

Training Seq2Species models requires installing the following dependencies:

  • python 2.7

  • protocol buffers

  • numpy

  • absl

Dependencies

Detailed instructions for installing TensorFlow are available on the Installing TensorFlow website. Please follow the full instructions for installing TensorFlow with GPU support. For most users, the following command will suffice for continuing with CPU support only:

# For CPU
pip install --upgrade tensorflow

The TensorFlow installation should also include installation of the numpy and absl libraries, which are two of TensorFlow's python dependencies. If necessary, instructions for standalone installation are available:

Information about protocol buffers, as well as download and installation intructions for the protocol buffer (protobuf) compiler, are available on the Google Developers website. A typical Ubuntu user can install this library using apt-get:

sudo apt-get install protobuf-compiler

Clone

Now, clone tensorflow/models to start working with the code:

git clone https://github.com/tensorflow/models.git

Protobuf Compilation

Seq2Species uses protobufs to store and save dataset and model metadata. Before the framework can be used to build and train models, the protobuf libraries must be compiled. This can be accomplished using the following command:

# From tensorflow/models/research
protoc seq2species/protos/seq2label.proto --python_out=.

Testing the Installation

One can test that Seq2Species has been installed correctly by running the following command:

python seq2species/run_training_test.py

Usage Information

Input data to Seq2Species models should be tf.train.Example protocol messages stored in TFRecord format. Specifically, the input pipeline expects tf.train.Examples with a 'sequence' field containing a genomic sequence as an upper-case string, as one field for each target label (e.g. 'species'). There should also be an accompanying Seq2LabelDatasetInfo text protobuf containing metadata about the input, including the possible label values for each target.

Below, we give an example command that could be used to launch training for 1000 steps, assuming that appropriate data and metadata files are stored at ${TFRECORD} and ${DATASET_INFO}:

python seq2species/run_training.py --train_files ${TFRECORD}
--metadata_path ${DATASET_INFO} --hparams 'train_steps=1000'
--logdir $HOME/seq2species

This will output TensorBoard summaries, TensorFlow checkpoints, Seq2LabelModelInfo and Seq2LabelExperimentMeasures metadata to the logdir $HOME/seq2species.

Preprocessed Seq2Species Data

We have provided preprocessed data based on 16S reference sequences from the NCBI RefSeq Targeted Loci Project in a Seq2Species bucket on Google Cloud Storage. After installing the Cloud SDK, one can download those data (roughly 25 GB) to a local directory ${DEST} using the gsutil command:

BUCKET=gs://brain-genomics-public/research/seq2species
mkdir -p ${DEST}
gsutil -m cp ${BUCKET}/* ${DEST}

To check if the copy has completed successsfully, check the ${DEST} directory:

ls -1 ${DEST}

which should produce:

ncbi_100bp_revcomp.dataset_info.pbtxt
ncbi_100bp_revcomp.tfrecord

The following command can be used to train a copy of one of our best-perfoming deep neural network models for 100 base pair (bp) data. This command also illustrates how to set hyperparameter values explicitly from the commandline. The file configuration.py provides a full list of hyperparameters, their descriptions, and their default values. Additional flags are described at the top of run_training.py.

python seq2species/run_training.py \
--num_filters 3 \
--noise_rate 0.04 \
--train_files ${DEST}/ncbi_100bp_revcomp.tfrecord \
--metadata_path ${DEST}/ncbi_100bp_revcomp.dataset_info.pbtxt \
--logdir $HOME/seq2species \
--hparams 'filter_depths=[1,1,1],filter_widths=[5,9,13],grad_clip_norm=20.0,keep_prob=0.94017831318,
lr_decay=0.0655052811,lr_init=0.000469689635793,lrelu_slope=0.0125376069918,min_read_length=100,num_fc_layers=2,num_fc_units=2828,optimizer=adam,optimizer_hp=0.885769367218,pointwise_depths=[84,58,180],pooling_type=avg,train_steps=3000000,use_depthwise_separable=true,weight_scale=1.18409526348'

Visualization

TensorBoard can be used to visualize training curves and other metrics stored in the summary files produced by run_training.py. Use the following command to launch a TensorBoard instance for the example model directory $HOME/seq2species:

tensorboard --logdir=$HOME/seq2species

Contact

Any issues with the Seq2Species framework should be filed with the TensorFlow/models issue tracker. Questions regarding Seq2Species capabilities can be directed to [email protected]. This code is maintained by @apbusia and @depristo.