・ ・ |
Ignite — это библиотека высокого уровня, помогающая гибко и прозрачно обучать и оценивать нейронные сети в PyTorch.
Нажмите на изображение, чтобы увидеть полный код
Меньше кода, чем в чистом PyTorch, обеспечивая при этом максимальный контроль и простоту.
Библиотечный подход и отсутствие инверсии управления программой – используйте Ignite где и когда вам нужно
Расширяемый API для метрик, менеджеров экспериментов и других компонентов.
Ignite — это библиотека , предоставляющая три функции высокого уровня:
Больше не нужно кодировать циклы for/while
для эпох и итераций. Пользователи создают экземпляры механизмов и запускают их.
from ignite . engine import Engine , Events , create_supervised_evaluator
from ignite . metrics import Accuracy
# Setup training engine:
def train_step ( engine , batch ):
# Users can do whatever they need on a single iteration
# Eg. forward/backward pass for any number of models, optimizers, etc
# ...
trainer = Engine ( train_step )
# Setup single model evaluation engine
evaluator = create_supervised_evaluator ( model , metrics = { "accuracy" : Accuracy ()})
def validation ():
state = evaluator . run ( validation_data_loader )
# print computed metrics
print ( trainer . state . epoch , state . metrics )
# Run model's validation at the end of each epoch
trainer . add_event_handler ( Events . EPOCH_COMPLETED , validation )
# Start the training
trainer . run ( training_data_loader , max_epochs = 100 )
Самое замечательное в обработчиках то, что они предлагают беспрецедентную гибкость (по сравнению, например, с обратными вызовами). Обработчиками могут быть любые функции: например, лямбда, простая функция, метод класса и т. д. Таким образом, нам не требуется наследовать интерфейс и переопределять его абстрактные методы, которые могут излишне увеличить объем вашего кода и его сложность.
trainer . add_event_handler ( Events . STARTED , lambda _ : print ( "Start training" ))
# attach handler with args, kwargs
mydata = [ 1 , 2 , 3 , 4 ]
logger = ...
def on_training_ended ( data ):
print ( f"Training is ended. mydata= { data } " )
# User can use variables from another scope
logger . info ( "Training is ended" )
trainer . add_event_handler ( Events . COMPLETED , on_training_ended , mydata )
# call any number of functions on a single event
trainer . add_event_handler ( Events . COMPLETED , lambda engine : print ( engine . state . times ))
@ trainer . on ( Events . ITERATION_COMPLETED )
def log_something ( engine ):
print ( engine . state . output )
# run the validation every 5 epochs
@ trainer . on ( Events . EPOCH_COMPLETED ( every = 5 ))
def run_validation ():
# run validation
# change some training variable once on 20th epoch
@ trainer . on ( Events . EPOCH_STARTED ( once = 20 ))
def change_training_variable ():
# ...
# Trigger handler with customly defined frequency
@ trainer . on ( Events . ITERATION_COMPLETED ( event_filter = first_x_iters ))
def log_gradients ():
# ...
События можно объединять вместе, чтобы обеспечить возможность нескольких вызовов:
@ trainer . on ( Events . COMPLETED | Events . EPOCH_COMPLETED ( every = 10 ))
def run_validation ():
# ...
Пользовательские события, связанные с обратными вызовами шагов и шагов оптимизатора:
from ignite . engine import EventEnum
class BackpropEvents ( EventEnum ):
BACKWARD_STARTED = 'backward_started'
BACKWARD_COMPLETED = 'backward_completed'
OPTIM_STEP_COMPLETED = 'optim_step_completed'
def update ( engine , batch ):
# ...
loss = criterion ( y_pred , y )
engine . fire_event ( BackpropEvents . BACKWARD_STARTED )
loss . backward ()
engine . fire_event ( BackpropEvents . BACKWARD_COMPLETED )
optimizer . step ()
engine . fire_event ( BackpropEvents . OPTIM_STEP_COMPLETED )
# ...
trainer = Engine ( update )
trainer . register_events ( * BackpropEvents )
@ trainer . on ( BackpropEvents . BACKWARD_STARTED )
def function_before_backprop ( engine ):
# ...
Метрики для различных задач: точность, отзыв, точность, матрица путаницы, IoU и т. д., ~20 метрик регрессии.
Пользователи также могут легко составлять свои показатели из существующих, используя арифметические операции или методы факела.
precision = Precision ( average = False )
recall = Recall ( average = False )
F1_per_class = ( precision * recall * 2 / ( precision + recall ))
F1_mean = F1_per_class . mean () # torch mean method
F1_mean . attach ( engine , "F1" )
Из пипа:
pip install pytorch-ignite
Из Конды:
conda install ignite -c pytorch
Из источника:
pip install git+https://github.com/pytorch/ignite
Из пипа:
pip install --pre pytorch-ignite
Из conda (это предполагает установку ночной версии pytorch вместо стабильной версии в качестве зависимости):
conda install ignite -c pytorch-nightly
Загрузите готовый образ Docker из нашего Docker Hub и запустите его с помощью Docker v19.03+.
docker run --gpus all -it -v $PWD :/workspace/project --network=host --shm-size 16G pytorchignite/base:latest /bin/bash
База
pytorchignite/base:latest
pytorchignite/apex:latest
pytorchignite/hvd-base:latest
pytorchignite/hvd-apex:latest
pytorchignite/msdp-apex:latest
Зрение:
pytorchignite/vision:latest
pytorchignite/hvd-vision:latest
pytorchignite/apex-vision:latest
pytorchignite/hvd-apex-vision:latest
pytorchignite/msdp-apex-vision:latest
НЛП:
pytorchignite/nlp:latest
pytorchignite/hvd-nlp:latest
pytorchignite/apex-nlp:latest
pytorchignite/hvd-apex-nlp:latest
pytorchignite/msdp-apex-nlp:latest
Более подробную информацию см. здесь.
Несколько советов для начала:
Вдохновленные torchvision/референциями, мы предоставляем несколько воспроизводимых базовых показателей для задач машинного зрения:
Функции:
Самый простой способ создать сценарии обучения с помощью PyTorch-Ignite:
Проблемы GitHub: вопросы, отчеты об ошибках, запросы функций и т. д.
Обсудить.PyTorch, категория "Зажечь".
PyTorch-Ignite Discord Server: для общения с сообществом
Обсуждения на GitHub: общие обсуждения, связанные с библиотекой, идеи, вопросы и ответы и т. д.
Мы создали форму для «отзывов пользователей». Мы ценим любые отзывы, и вот каким мы хотели бы видеть наше сообщество:
Спасибо!
Пожалуйста, ознакомьтесь с правилами внесения взносов для получения дополнительной информации.
Как всегда пиар приветствуется :)
Другие проекты смотрите в разделе «Используется»
Если ваш проект реализует документ, представляет другие варианты использования, не описанные в наших официальных руководствах, коде конкурса Kaggle или просто ваш код дает интересные результаты и использует Ignite. Мы хотели бы добавить ваш проект в этот список, поэтому пришлите, пожалуйста, PR с кратким описанием проекта.
Если вы используете PyTorch-Ignite в научной публикации, мы будем признательны за ссылки на наш проект.
@misc{pytorch-ignite,
author = {V. Fomin and J. Anmol and S. Desroziers and J. Kriss and A. Tejani},
title = {High-level library to help with training neural networks in PyTorch},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/pytorch/ignite}},
}
PyTorch-Ignite — это аффилированный проект NumFOCUS, который управляется и поддерживается добровольцами сообщества PyTorch в качестве частных лиц (а не представителей своих работодателей). На странице «О нас» вы найдете список основных участников. По вопросам использования и проблемам обращайтесь по различным каналам здесь. По всем остальным вопросам и запросам отправьте электронное письмо по адресу [email protected].