Tensor2Tensor

Tensor2Tensor (T2T) — это библиотека моделей глубокого обучения и наборов данных, разработанная для того, чтобы сделать глубокое обучение более доступным и ускорить исследования в области машинного обучения.
T2T был разработан исследователями и инженерами из команды Google Brain и сообществом пользователей. В настоящее время он устарел — мы продолжаем его поддерживать и приветствуем исправления ошибок, но рекомендуем пользователям использовать библиотеку-преемницу Trax.
Этот блокнот iPython объясняет T2T и работает в вашем браузере с использованием бесплатной виртуальной машины от Google, установка не требуется. Кроме того, вот версия с одной командой, которая устанавливает T2T, загружает MNIST, обучает модель и оценивает её:
pip install tensor2tensor && t2t-trainer \
--generate_data \
--data_dir=~/t2t_data \
--output_dir=~/t2t_train/mnist \
--problem=image_mnist \
--model=shake_shake \
--hparams_set=shake_shake_quick \
--train_steps=1000 \
--eval_steps=100
Ниже приведён ряд задач, которые можно решить с помощью T2T при обучении соответствующей модели на соответствующей проблеме. Мы даём описание проблемы и модели ниже и предлагаем настройку гиперпараметров, которая хорошо работает в нашей среде. Обычно мы запускаем либо облачные ТПУ, либо 8-GPU машины; вам может потребоваться изменить гиперпараметры, если вы работаете на другой установке.
Для оценки математических выражений на уровне символов, включающих сложение, вычитание и умножение как положительных, так и отрицательных десятичных чисел с переменными цифрами, присвоенными символическим переменным, используйте
--problem=algorithmic_math_two_variables
Вы можете попробовать решить задачу с различными моделями трансформаторов и гиперпараметрами, как описано в статье:
Стандартный трансформатор:
--model=transformer
Для ответов на вопросы на основе рассказа используйте:
набор данных bAbi: --problem=babi_qa_concat_task1_1k
.
Можно выбрать задачу bAbi из диапазона [1,20] и подмножество из 1к или 10к. Чтобы объединить тестовые данные из всех задач в один тестовый набор, используйте --problem=babi_qa_concat_all_tasks_10k
.
Для классификации изображений у нас есть несколько стандартных наборов данных:
ImageNet (большой набор данных): --problem=image_imagenet
, или одна из уменьшенных версий (image_imagenet224
, image_imagenet64
, image_imagenet32
).
CIFAR-10: --problem=image_cifar10
(или --problem=image_cifar10_plain
, чтобы отключить увеличение данных).
CIFAR-100: --problem=image_cifar100
.
MNIST: --problem=image_mnist
.
Для ImageNet мы предлагаем использовать ResNet или Xception, то есть использовать --model=resnet --hparams_set=resnet_50
или --model=xception --hparams_set=xception_base
. Resnet должен достичь точности более 76% top-1 на ImageNet.
Для CIFAR и MNIST мы предлагаем попробовать модель shake-shake: --model=shake_shake --hparams_set=shakeshake_big
. Эта настройка, обученная для --train_steps=700000
, должна дать точность около 97% на CIFAR-10.
Для (условной) генерации изображений у нас есть ряд стандартных наборов данных:
CelebA: --problem=img2img_celeba
для перевода изображения в изображение, а именно суперразрешение с 8x8 до 32x32.
CelebA-HQ: --problem=image_celeba256_rev
для уменьшенного 256x256.
CIFAR-10: --problem=image_cifar10_plain_gen_rev
для генерации 32x32 по классам.
LSUN Bedrooms: --problem=image_lsun_bedrooms_rev
.
MS-COCO: --problem=image_text_ms_coco_rev
для генерации текста в изображение.
Small ImageNet (большой набор данных): --problem=image_imagenet32_gen_rev
для 32x32 или --problem=image_imagenet64_gen_rev
для 64x64.
Мы предлагаем использовать Image Transformer, т. е. --model=imagetransformer
, или Image Transformer Plus, т.е. --model=imagetransformerpp
, который использует дискретизированную смесь логистики, или вариационный автоэнкодер, т. е. --model=transformer_ae
. Для CIFAR-10 использование --hparams_set=imagetransformer_cifar10_base
или --hparams_set=imagetransformer_cifar10_base_dmol
даёт 2,90 бита на измерение. Для Imagenet-32 использование --hparams_set=imagetransformer_imagenet32_base
даёт 3,77 бита на измерение.
Для языкового моделирования у нас есть следующие наборы данных в T2T:
PTB (небольшой набор данных): --problem=languagemodel_ptb10k
для моделирования на уровне слов и --problem=languagemodel_ptb_characters
для моделирования на уровне символов.
LM1B (корпус из миллиарда слов): --problem=languagemodel_lm1b32k
для субсимвольного моделирования и --problem=languagemodel_lm1b_characters
для символьного моделирования.
Мы рекомендуем начать с --model=transformer
в этой задаче и использовать --hparams_set=transformer_small
для PTB и --hparams_set=transformer_base
для LM1B.
Для задачи распознавания настроения предложения используйте
--problem=sentiment_imdb
.Мы рекомендуем использовать здесь --model=transformer_encoder
и, поскольку это небольшой набор данных, попробуйте --hparams_set=transformer_tiny
и обучите за несколько шагов (например, --train_steps=2000
).
Для преобразования речи в текст у нас есть эти наборы данных в T2T:
Librispeech (американский английский): --problem=librispeech
для всего набора и --problem=librispeech_clean
для меньшей, но хорошо отфильтрованной части.
Mozilla Common Voice (американский английский): --problem=common_voice
для всего набора --problem=common_voice_clean
для проверенного по качеству подмножества.
Для обобщения более длинного текста в более короткий у нас есть такие наборы данных:
Мы предлагаем использовать --model=transformer и --hparams_set=transformer_prepend для этой задачи. Это даёт хорошие результаты по ROUGE.
Перевод
В T2T есть несколько наборов данных для перевода:
Можно получить переводы в обратном направлении, добавив _rev к имени проблемы, например, для немецко-английского используйте --problem=translate_ende_wmt32k_rev (обратите внимание, что вам всё равно нужно загрузить исходные данные с помощью t2t-datagen --problem=translate_ende_wmt32k).
Для всех задач перевода мы предлагаем попробовать модель Transformer: --model=transformer. Сначала лучше всего попробовать базовую настройку --hparams_set=transformer_base. При обучении на 8 GPU в течение 300 тыс. шагов это должно дать оценку BLEU около 28 для набора данных английский-немецкий, что близко к уровню техники. Если обучение проводится на одном GPU, попробуйте настройку --hparams_set=transformer_base_single_gpu. Для очень хороших результатов или больших наборов данных (например, для английского-французского) попробуйте большую модель с --hparams_set=transformer_big.
См. этот пример, чтобы узнать, как работает перевод.
Вот пошаговое руководство по обучению хорошей модели перевода с английского на немецкий с использованием модели Transformer из Attention Is All You Need на данных WMT.
pip install tensor2tensor
# See what problems, models, and hyperparameter sets are available.
# You can easily swap between them (and add new ones).
t2t-trainer --registry_help
PROBLEM=translate_ende_wmt32k
MODEL=transformer
HPARAMS=transformer_base_single_gpu
DATA_DIR=$HOME/t2t_data
TMP_DIR=/tmp/t2t_datagen
TRAIN_DIR=$HOME/t2t_train/$PROBLEM/$MODEL-$HPARAMS
mkdir -p $DATA_DIR $TMP_DIR $TRAIN_DIR
# Generate data
t2t-datagen \
--data_dir=$DATA_DIR \
--tmp_dir=$TMP_DIR \
--problem=$PROBLEM
# Train
# * If you run out of memory, add --hparams='batch_size=1024'.
t2t-trainer \
--data_dir=$DATA_DIR \
--problem=$PROBLEМ \
--model=$MODEL \
--hparams_set=$HPARAMS \
--output_dir=$TRAIN_DIR
# Decode
DECODE_FILE=$DATA_DIR/decode_this.txt
echo "Hello world" >> $DECODE_FILE
echo "Goodbye world" >> $DECODE_FILE
echo -e 'Hallo Welt\nAuf Wiedersehen Welt' > ref-translation.de
BEAM_SIZE=4
ALPHA=0.6
t2t-decoder \
--data_dir=$DATA_DIR \
--problem=$PROBLEM \
--model=$MODEL \
--hparams_set=$HPARAMS \
--output_dir=$TRAIN_DIR \
--decode_hparams="beam_size=$BEAM_SIZE,alpha=$ALPHA" \
--decode_from_file=$DECODE_FILE \
--decode_to_file=translation.en
# See the translations
cat translation.en
# Evaluate the BLEU score
# Note: Report this BLEU score in papers, not the internal approx_bleu metric.
t2t-bleu --translation=translation.en --reference=ref-translation.de
# Assumes tensorflow or tensorflow-gpu installed
pip install tensor2tensor
# Installs with tensorflow-gpu requirement
pip install tensor2tensor[tensorflow_gpu]
# Installs with tensorflow (cpu) requirement
pip install tensor2tensor[tensorflow]
Бинарные файлы:
# Data generator
t2t-datagen
# Trainer
t2t-trainer --registry_help
Использование библиотеки:
python -c "from tensor2tensor.models.transformer import Transformer"
Многие современные и базовые модели встроены, и новые модели можно легко добавить (откройте вопрос или запрос на вытягивание!).
Доступно множество наборов данных по различным модальностям — текст, аудио, изображение — и новые можно легко добавить (открывайте вопрос или запрос на вытягивание для общедоступных наборов данных!).
Модели можно использовать с любым набором данных и режимом ввода (или даже несколькими); вся обработка, специфичная для модальности (например, поиск встраивания токенов для текста), выполняется с... T2T обзор
Проблемы состоят из таких функций, как входы и цели, а также метаданных, таких как модальность каждой функции (например, символ, изображение, аудио) и словари. Функции проблемы задаются набором данных, который хранится в виде файла TFRecord с протокольными буферами tensorflow.Example. Все проблемы импортируются в all_problems.py
или регистрируются с помощью @registry.register_problem
. Запустите t2t-datagen
, чтобы увидеть список доступных проблем и загрузить их.
T2TModel
определяют основные вычисления тензор-в-тензор. Они применяют преобразование по умолчанию к каждому входу и выходу, чтобы модели могли работать с независимыми от модальности тензорами (например, вложениями на входе; и линейным преобразованием на выходе для создания логитов для softmax по классам). Все модели импортированы в подпакет models
, наследуются от T2TModel
и зарегистрированы с помощью @registry.register_model
.
Наборы гиперпараметров кодируются в объектах HParams
и регистрируются с помощью @registry.register_hparams
. У каждой модели и проблемы есть HParams
. Базовый набор гиперпараметров определён в common_hparams.py
, а функции набора гиперпараметров могут составлять другие функции набора гиперпараметров.
Тренер — это точка входа для обучения, оценки и вывода. Пользователи могут легко переключаться между проблемами, моделями и наборами гиперпараметров с помощью флагов --model
, --problem
и --hparams_set
. Определённые гиперпараметры можно переопределить с помощью флага --hparams
. Флаги --schedule
и связанные с ними контролируют локальное и распределённое обучение/оценку (документация по распределённому обучению).
Добавление собственных компонентов
Компоненты T2T регистрируются с использованием центрального механизма регистрации, который позволяет легко добавлять новые компоненты и легко переключаться между ними с помощью командного флага. Вы можете добавить свои собственные компоненты, не редактируя кодовую базу T2T, указав флаг --t2t_usr_dir
в t2t-trainer
.
Вы можете сделать это для моделей, наборов гиперпараметров, модальностей и проблем. Пожалуйста, отправьте запрос на вытягивание, если ваш компонент может быть полезен другим.
См. example_usr_dir
для примера пользовательского каталога.
Добавление набора данных
Чтобы добавить новый набор данных, создайте подкласс Problem
и зарегистрируйте его с помощью @registry.register_problem
. См. Запуск на FloydHub
Нажмите на эту кнопку, чтобы открыть рабочее пространство на FloydHub. (https://floydhub.com/run)
Вы можете использовать рабочее пространство для разработки и тестирования своего кода на полностью настроенной облачной машине с GPU.
Tensor2Tensor предустановлен в среде, вы можете просто открыть терминал и запустить свой код.
# Протестируйте быстрый запуск в терминале рабочего пространства с помощью этой команды
t2t-trainer \
--generate_data \
--data_dir=./t2t_data \
--output_dir=./t2t_train/mnist \
--problem=image_mnist \
--model=shake_shake \
--hparams_set=shake_shake_quick \
--train_steps=1000 \
--eval_steps=100
Примечание: Убедитесь, что вы соблюдаете Условия предоставления услуг FloydHub.
Статьи
При упоминании Tensor2Tensor, пожалуйста, ссылайтесь на эту статью:
@article{tensor2tensor,
author = {Ashish Vaswani and Samy Bengio and Eugene Brevdo and
Francois Chollet and Aidan N. Gomez and Stephan Gouws and Llion Jones and
\L{}ukasz Kaiser and Nal Kalchbrenner and Niki Parmar and Ryan Sepassi and
Noam Shazeer and Jakob Uszkoreit},
title = {Tensor2Tensor for Neural Machine Translation},
journal = {CoRR},
volume = {abs/1803.07416},
year = {2018},
url = {http://arxiv.org/abs/1803.07416}
}
На Tensor2Tensor были разработаны ряд передовых моделей и методов глубокого обучения. Вот некоторые статьи, которые изначально основывались на T2T и использовали его возможности и архитектуру способами, описанными в посте блога Google Research, представляющем T2T:
ПРИМЕЧАНИЕ: Это не официальный продукт Google.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )