[PYTHON] Apprenons Deep SEA avec Selene

Selene est une bibliothèque de Deep Learning basée sur PyTorch dédiée à l'analyse de données de séquence. C'est comme NiftyNet dans les images médicales, et vous pouvez faire du Deep Learning simplement en définissant le fichier cofig sans écrire de code. Comme l'échantillonnage peut être effectué dans les mêmes conditions, il est facile de comparer les performances du modèle. Les modèles réalisés avec Selene peuvent également être partagés par Kipoi dans l'article précédent (https://qiita.com/takeajioka/items/7709e264c6cd8fbcfae1).

github:https://github.com/FunctionLab/selene Papier: https://www.nature.com/articles/s41592-019-0360-8 Document: https://selene.flatironinstitute.org/

À propos, veuillez noter qu'il existe une bibliothèque Python avec exactement le même nom dans la bibliothèque Web.

Installation

Nécessite Python 3.6 ou supérieur et PyTorch installé. L'environnement était Ubuntu 16.04, CUDA10, Anaconda, Python3.6, PyTorch 1.2.0.

pip install selene-sdk

Vous l'avez maintenant installé. La version était 0.4.8.

Essayez de bouger

En gros, écrivez simplement les paramètres dans le fichier de configuration et exécutez. Comment écrire le fichier de configuration (format YAML) peut être trouvé à ici. Nous définirons quatre éléments: opération, modèle, échantillonneur et paramètres. Les données sont distribuées de manière reproductible aux données d'entraînement, aux données de validation et aux données de test.

Tout d'abord, git clone.

git clone https://github.com/FunctionLab/selene.git

Il a fallu beaucoup de temps pour git cloner. Il y a un exemple de fichier de configuration dans le dossier config_examples pour votre référence.

Cette fois, je vais essayer quickstart_training dans le didacticiel.

cd selene/tutorials/quickstart_training
wget https://zenodo.org/record/1443558/files/selene_quickstart.tar.gz
tar -zxvf selene_quickstart.tar.gz
mv selene_quickstart_tutorial/* .

Le téléchargement des données prend du temps. Si vous ne pouvez pas télécharger selene_quickstart.tar.gz, vous pouvez le remplacer par cette méthode.

config utilise un modèle plus profond de deepSEA. Je passe à RandomPositionsSampler. "Simple_train.yml"

ops: [train, evaluate]
model: {
    path: ./deeperdeepsea.py,
    class: DeeperDeepSEA,
    class_args: {
        sequence_length: 1000,
        n_targets: 1,
    },
    non_strand_specific: mean
}
sampler: !obj:selene_sdk.samplers.RandomPositionsSampler {
    reference_sequence: !obj:selene_sdk.sequences.Genome {
        input_path: ./male.hg19.fasta
    },
    features: !obj:selene_sdk.utils.load_features_list {
        input_path: ./distinct_features.txt
    },
    target_path: ./sorted_GM12878_CTCF.bed.gz,
    seed: 100,
    sequence_length: 1000,
    center_bin_to_predict: 200,
    test_holdout: [chr8, chr9],
    validation_holdout: [chr6, chr7],
    feature_thresholds: 0.5,
    mode: train,
    save_datasets: [validate, test]
}
train_model: !obj:selene_sdk.TrainModel {
    batch_size: 64,
    max_steps: 8000,
    report_stats_every_n_steps: 1000,
    n_validation_samples: 32000,
    n_test_samples: 120000,
    cpu_n_threads: 10,
    use_cuda: True,
    data_parallel: False
}
random_seed: 1445
output_dir: ./training_outputs
create_subdirectory: False
load_test_set: False

Pour exécuter, exécutez simplement le code suivant en Python.

from selene_sdk.utils import load_path, parse_configs_and_run
parse_configs_and_run(load_path("./simple_train.yml"), lr=0.01)

En utilisant environ 2 Go de mémoire GPU, j'ai pu terminer l'apprentissage en quelques minutes. Le résultat est ci-dessous. (Évaluation de la précision avec les données de test) roc_curves.jpg

precision_recall_curves.jpg

Le modèle est enregistré dans best_model.pth.tar.

Une fois le modèle DeepSEA créé, l'effet de la mutation peut être prédit en entrant les données de séquence contenant la mutation. Vous pouvez simuler le résultat de GWAS par la prédiction.

Impressions

Il prend également en charge Kipoi, et j'ai trouvé que c'était une bibliothèque très utile. Cette fois, je n'ai pu essayer que l'échantillon, donc la prochaine fois, j'aimerais définir le modèle moi-même.

Recommended Posts

Apprenons Deep SEA avec Selene
Apprenez Python avec ChemTHEATER
Apprenez Zundokokiyoshi en utilisant LSTM
Pandas apprenant avec la chimioinfomatique
Apprentissage Scikit-Learn avec la chimioinfomatique
Apprenez avec Chemo Informatics Matplotlib
Apprenez avec un pendule inversé DQN (Deep Q Network)
Apprenez avec Chemo Informatics NumPy
DCGAN avec TF Learn
Apprenez Pendulum-v0 avec DDPG
Jouons avec la 4e dimension 4e
Jouons avec les données Amedas - Partie 1
Apprenez librosa avec un tutoriel 1
Essayez l'apprentissage en profondeur avec TensorFlow
Apprenez les orbites elliptiques avec Chainer
Faisons Othello avec wxPython
Apprentissage profond du noyau avec Pyro
Jouons avec les données Amedas - Partie 4
Apprenez de nouvelles données avec PaintsChainer
Essayez le Deep Learning avec FPGA
Écrivons python avec cinema4d.
Faisons R-CNN avec Sklearn-theano
Jouons avec les données Amedas - Partie 3
Jouons avec les données Amedas - Partie 2
Clustering embarqué profond avec Chainer 2.0
Construisons git-cat avec Python
Générez des Pokémon avec Deep Learning