1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-tensor2tensor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Tensor2Tensor

PyPI version GitHub Issues Contributions welcome Gitter ![License](https://img.shields.io/badge/License-Apache 2.0-brightgreen.svg) Travis Run on FH

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 машины; вам может потребоваться изменить гиперпараметры, если вы работаете на другой установке.

Понимание математического языка

Для оценки математических выражений на уровне символов, включающих сложение, вычитание и умножение как положительных, так и отрицательных десятичных чисел с переменными цифрами, присвоенными символическим переменным, используйте

Вы можете попробовать решить задачу с различными моделями трансформаторов и гиперпараметрами, как описано в статье:

  • Стандартный трансформатор: --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.

Анализ настроений

Для задачи распознавания настроения предложения используйте

  • набор данных IMDB: --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 для проверенного по качеству подмножества.

Обобщение

Для обобщения более длинного текста в более короткий у нас есть такие наборы данных:

  • статьи CNN/DailyMail, обобщённые в несколько предложений. Проблема = summarize_cnn_dailymail32k

Мы предлагаем использовать --model=transformer и --hparams_set=transformer_prepend для этой задачи. Это даёт хорошие результаты по ROUGE.

Перевод

В T2T есть несколько наборов данных для перевода:

  • Английский-немецкий: --problem=translate_ende_wmt32k.
  • Английский-французский: --problem=translate_enfr_wmt32k.
  • Английский-чешский: --problem=translate_encs_wmt32k.
  • Английский-китайский: --problem=translate_enzh_wmt32k.
  • Английский-вьетнамский: --problem=translate_envi_iwslt32k.
  • Английский-испанский: --problem=translate_enes_wmt32k.

Можно получить переводы в обратном направлении, добавив _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:

  • Внимание — это всё, что вам нужно (Attention Is All You Need) (https://arxiv.org/abs/1706.03762);
  • Свёрточные нейронные сети с разделением по глубине для машинного перевода (Depthwise Separable Convolutions for Neural Machine Translation) (https://arxiv.org/abs/1706.03059);
  • Одна модель, чтобы выучить их все (One Model To Learn Them All) (https://arxiv.org/abs/1706.05137);
  • Дискретные автоэнкодеры для моделей последовательностей (Discrete Autoencoders for Sequence Models) (https://arxiv.org/abs/1801.09797);
  • Генерация Википедии путём суммирования длинных последовательностей (Generating Wikipedia by Summarizing Long Sequences) (https://arxiv.org/abs/1801.10198);
  • Модель изображения (Image Transformer) (https://arxiv.org/abs/1802.05751);
  • Советы по обучению модели трансформатора (Training Tips for the Transformer Model) (https://arxiv.org/abs/1804.00247);
  • Самовнимание с представлениями относительного положения (Self-Attention with Relative Position Representations) (https://arxiv.org/abs/1803.02155);
  • Быстрое декодирование в моделях последовательностей с использованием дискретных скрытых переменных (Fast Decoding in Sequence Models using Discrete Latent Variables) (https://arxiv.org/abs/1803.03382);
  • Адафактор: адаптивные скорости обучения с сублинейной стоимостью памяти (Adafactor: Adaptive Learning Rates with Sublinear Memory Cost) (https://arxiv.org/abs/1804.04235);
  • Универсальные трансформаторы (Universal Transformers) (https://arxiv.org/abs/1807.03819);
  • Использование трансформаторов для внимания к математическому языку (Attending to Mathematical Language with Transformers) (https://arxiv.org/abs/1812.02825);
  • Эволюционировавший трансформатор (The Evolved Transformer) (https://arxiv.org/abs/1901.11117);
  • Обучение с подкреплением на основе модели для Atari (Model-Based Reinforcement Learning for Atari) (https://arxiv.org/abs/1903.00374);
  • VideoFlow: генеративная модель на основе потока для видео (VideoFlow: A Flow-Based Generative Model for Video) (https://arxiv.org/abs/1903.01434).

ПРИМЕЧАНИЕ: Это не официальный продукт Google.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Tensor2Tensor — это модульная и расширяемая библиотека и двоичный файл, который используется для обучения моделей глубокого обучения в TensorFlow и фокусируется на задачах последовательности. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-tensor2tensor.git
git@api.gitlife.ru:oschina-mirror/mirrors-tensor2tensor.git
oschina-mirror
mirrors-tensor2tensor
mirrors-tensor2tensor
master