GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

tensorflow

tensor2tensor – 深い学習をより身近にし、MLの研究を加速するために設計された深い学習モデルとデータセットのライブラリ

投稿日:

深い学習をより身近にし、MLの研究を加速するために設計された深い学習モデルとデータセットのライブラリ。

Tensor2Tensor

要するにTensor2Tensor 、つまりT2Tは、深い学習をよりアクセシブルにし、 MLの研究加速するように設計された、深い学習モデルとデータセットのライブラリです。 T2Tは、 Google Brainチームとユーザーコミュニティの研究者やエンジニアが積極的に使用し、維持管理しています。 私たちもあなたと協力したいと思っていますので、 GitHubで問題開いたり、プルリクエストを送信してください( 貢献文書を参照)。 GitterGoogleとチャットし、 T2T Googleグループに参加できます

クイックスタート

このiPythonノートブックはT2Tについて説明しており、Googleからの無料のVMを使用してブラウザで動作します。インストールは必要ありません。 代わりに、T2Tをインストールし、MNISTをダウンロードし、モデルをトレーニングし、それを評価する1つのコマンドバージョンがあります:

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で解決できるいくつかのタスクを示します。 私たちは以下の問題とモデルを提示します。私たちが知っているハイパーパラメータの設定は、私たちのセットアップではうまくいきます。 通常、クラウドTPUまたは8-GPUマシンのいずれかで実行されます。 別の設定で実行する場合は、ハイパーパラメータを変更する必要があります。

画像の分類

画像分類のために、私たちは多くの標準的なデータセットを持っています:

  • ImageNet(大きなデータセット):– --problem=image_imagenet 、または再スケーリングされたバージョンの1つ( image_imagenet224image_imagenet64image_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は、ImageNet上で76%のトップ1精度を達成するはずです。

CIFARとMNISTについては、shake-shakeモデルを試してみることをお勧めします--model=shake_shake --hparams_set=shakeshake_big --train_steps=700000設定されているこの設定は、CIFAR-10で97%の精度に近い値になります。

言語モデリング

言語モデリングでは、T2Tに次のデータセットがあります。

  • PTB(小さなデータセット):単語レベルモデリングの場合は--problem=languagemodel_ptb_characters 、文字レベルモデリングの場合は--problem=languagemodel_ptb_characters
  • LM1B(10億語のコーパス): --problem=languagemodel_lm1b32kレベルモデリングの場合は--problem=languagemodel_lm1b_characters 、文字レベルモデリングの場合は--problem=languagemodel_lm1b_characters

この作業では--hparams_set=transformer_smallを使い、PTBには--hparams_set=transformer_base 、LM1Bには--hparams_set=transformer_baseを使用--hparams_set=transformer_baseをお勧めします。

感情分析

文の感情を認識するためには、

  • IMDBのデータセット:– --problem=sentiment_imdb

ここで--model=transformer_encoderを使用することをお勧めします。これは小さなデータセットであるため、 – --hparams_set=transformer_tinyを試して、いくつかのステップ(例:– --train_steps=2000 )で--train_steps=2000みてください。

音声認識

音声テキストの場合、T2Tに次のデータセットがあります。

  • Librispeech(英語のテキストからテキストへ):– --problem=librispeech全体のセットの--problem=librispeech_cleanと、小さくて--problem=librispeech_cleanとフィルタリングされた部分の--problem=librispeech_clean

要約

長いテキストを短いテキストに要約する場合、次のデータセットがあります。

  • CNN / DailyMailの記事をいくつかの文に--problem=summarize_cnn_dailymail32k :– --problem=summarize_cnn_dailymail32k

この作業には、 – --hparams_set=transformer_prepend--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

問題の名前に_revを付けることで、他の方向の翻訳を得ることができます。例えば、ドイツ語 – 英語の使用の場合--problem=translate_ende_wmt32k_revです。

すべての翻訳問題について、Transformerモデルを試すことをお勧めします--model=transformer 最初に、基本設定の--hparams_set=transformer_baseを試してみることをお--hparams_set=transformer_baseます。 8つのGPUを300Kステップで訓練すると、これは最先端に近い英語 – ドイツ語のデータセットで約28のBLEUスコアに達するはずです。 単一のGPUでトレーニングする場合は、– --hparams_set=transformer_base_single_gpu設定を試してください。 非常に良い結果やより大きなデータセット(英語 – フランス語など)の場合、– --hparams_set=transformer_big--hparams_set=transformer_bigて大きなモデルを試してみてください。

基本

ウォークスルー

ここで 、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=$PROBLEM \
  --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"

特徴

  • 多くの最先端のモデルとベースラインモデルが組み込まれており、新しいモデルを簡単に追加できます(問題を開いたり、要求を引き出すことができます)。
  • モダリティ(テキスト、オーディオ、画像)の生成と使用が可能な多くのデータセット、および新しいものを簡単に追加できます(公開データセットの問題を開くかプルリクエスト!)。
  • モデルは、任意のデータセットおよび入力モード(または複数のモード)で使用できます。 すべてのモダリティ固有の処理(テキストトークンのルックアップの埋め込みなど)は、データセット/タスク仕様の機能ごとに指定されたModalityオブジェクトで行われます。
  • マルチGPUマシンと同期(1マスター、多くのワーカー)および非同期(パラメタサーバーを介して同期する独立したワーカー) 分散トレーニングをサポート
  • データ生成スクリプトt2t-datagenとトレーニングスクリプトt2t-trainerして、コマンドラインフラグでデータセットとモデル間を簡単にスワップできます。
  • Google Cloud MLCloud TPUのトレーニング

T2Tの概要

データセット

データセットはすべてTFRecordファイルで標準化されてTFRecordます。 tensorflow.Exampleプロトコルバッファ。 すべてのデータセットはデータジェネレータで登録および生成され、多くの共通シーケンスデータセットはすでに生成および使用可能です。

問題とモダリティ

問題は、主に入出力モダリティ (シンボル、イメージ、オーディオ、ラベルなど)とボキャブラリを設定することで、データセットとタスクのトレーニング時のハイパーパラメータを定義します(該当する場合)。 すべての問題はproblem_hparams.py定義されているか、 @registry.register_problemt2t-datagenを実行して利用可能なすべての問題のリストを表示)で登録されてい@registry.register_problem modality.pyで定義されたmodality.pyは、入力と出力のデータ型を抽象化して、 モデルがモダリティに依存しないテンソルを扱うようにします

モデル

T2TModelは、入出力モダリティやタスクとは無関係に、コアのテンソル – テンソル変換を定義します。 モデルは密なテンソルを取り込み、高密度のテンソルを生成します。最終的なステップでは、タスクに応じてモダリティ (例えば、最終的な線形変換を介して与えられ、クラスに対してソフトマックスのロジットを生成する)によって変換されます。 すべてのモデルはmodelsサブパッケージにインポートされ、 T2TModel定義されたt2t_model.pyから継承され、 @registry.register_model登録され@registry.register_model

ハイパーパラメータセット

tf.contrib.training.HParams セットは、 @registry.register_hparamsで定義され、コードで登録され、 tf.contrib.training.HParamsオブジェクトでエンコードされます。 HParamsは、問題の仕様とモデルの両方に対応しています。 ハイパーパラメータの基本セットはcommon_hparams.pyで定義され、 common_hparams.pyパラメータセット関数は他のハイパーパラメータセット関数を構成できます。

トレーナー

トレーナーバイナリは、トレーニング、評価、および推論の主要なエントリポイントです。 --problem 、– --hparams_set 、および--hparams_setフラグを使用して、ユーザーは問題、モデル、およびハイパーパラメータセットを簡単に切り替えることができます。 特定のハイパーパラメータは、– --hparamsフラグで上書きできます。 --scheduleおよび関連フラグは、ローカルおよび分散トレーニング/評価( 分散トレーニングドキュメント )を制御します。

自分のコンポーネントを追加する

T2Tのコンポーネントは、簡単に新しいものを追加し、コマンドラインフラグで簡単に交換できる中央登録メカニズムを使用して登録されます。 t2t-trainer --t2t_usr_dirフラグを指定することで、 --t2t_usr_dirコードベースを編集せずに独自のコンポーネントを追加できます。

モデル、ハイパーパラメータセット、モダリティ、および問題については、そうすることができます。 あなたのコンポーネントが他の人にとって役に立つかもしれないなら、プルリクエストを提出してください。

サンプルのユーザーディレクトリについては、 example_usr_dirを参照してください。

データセットの追加

新しいデータセットを追加するには、 Problemをサブクラス化し、 @registry.register_problem 例についてはTranslateEndeWmt8kを参照してください。

READMEも参照してください。

論文

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に基づいていて、T2Tを紹介しているGoogle Research Blogの記事に記載されている方法でその機能とアーキテクチャの恩恵を受けた論文をいくつか挙げます。

注:これは公式のGoogleサービスではありません。







-tensorflow
-, , , ,

執筆者: