TensorFlow : TensorLayer : チュートリアル (1) Welcome (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 12/01/2018
* 本ページは、TensorLayer の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
- github.com/tensorlayer/tensorlayer/…/README.md
- tensorlayer.readthedocs.io/en/stable/user/tutorials.html
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
TensorLayer : README.md
TensorLayer は研究者と技術者のための新しい TensorFlow-ベースの深層学習そして強化学習ライブラリです。それは現実世界の AI アプリケーションを構築するための鍵となるカスタマイズ可能なニューラル層 / 関数の巨大なコレクションを提供します。TensorLayer は ACM Multimedia Society により 2017 ベスト・オープンソース・ソフトウェアとして表彰されています。
特徴
深層学習実践者として、様々な開発目的を扱えるライブラリを探し求めていました。このライブラリは多様なサンプル、チュートリアルそして事前訓練されたモデルを提供することにより採用することが容易です。また、それはユーザに TensorFlow を容易に再調整する (= fine-tune) ことを可能にします; その一方でプロダクション配備のために適合します。TensorLayer はこれら総ての目的を満たすことを目指します。それは 3 つのキー特徴を持ちます :
- 単純性 : TensorLayer は TensorFlow の低位データフロー・インターフェイスを高位層 / モデルにリフトします。広いコミュニティにより貢献された豊富はサンプルコードを通して学習することは非常に容易です。
- 柔軟性 : TensorLayer API は透過的です : それは TensorFlow をユーザからマスクしません ; 低位調整と深いカスタマイゼーションを手助けする大希望なフックを残します。
- Zero-cost 抽象 : TensorLayer は TensorFlow の完全なパワーを達成します。
TensorLayer はライブラリ風景のユニークな位置に立ちます。Keras と TFLearn のような他のラッパー・ライブラリもまた高位抽象を提供します。けれども、それらはユーザから基礎をなすエンジンをしばしば隠します、それはそれらをカスタマイズして再調整することを困難にします。反対に、TensorLayer API は一般に柔軟で透過的です。ユーザはサンプルとチュートリアルで始めて、それから TensorFlow にシームレスにダイブすることが容易であることをしばしば見い出すでしょう。加えて、TensorLayer は Keras, TFSlim と TFLearn からのコンポーネントをインポートするためのネイティブ・サポートを通してロックインされたライブラリを作成しません。
TensorLayer は Imperial College London, UC Berkeley, Carnegie Mellon University, Stanford University, と University of Technology of Compiegne (UTC) のような大学、そして Google, Microsoft, Alibaba, Tencent, Xiaomi, と Bloomberg のような企業からのトップ研究者と技術者の中で素早く高まる利用を持ちます。
チュートリアル (1)
深層学習について、このチュートリアルは (おそらくニューラルネットワークの “Hello World” である) MNIST データセットを使用して貴方に手書き数字分類器の構築を案内します。強化学習については、元のスクリーン入力からコンピュータに Pong ゲームをプレーすることを学習させます。自然言語処理については、単語埋め込みから始めてそして言語モデリングと機械翻訳を記述します。
このチュートリアルは Google TensorFlow 深層学習チュートリアルの総てのモジュール化された実装を含みますので、TensorFlow 深層学習チュートリアルを同時に読むこともできます。
Note: For experts: InputLayer と DenseLayer のソースコードを読んでください、TensorLayer がどのように動作するか理解するでしょう。その後、Github のコードを直接読むことを進めます。
Before we start
チュートリアルは貴方がニューラルネットワークと TensorFlow にある程度精通していることを仮定しています。Deeplearning Tutorial からニューラルネットワークの基礎を学習することを試せます。
人工ニューラルネットワークへのよりスローペースなイントロダクションについては、Andrej Karpathy et al. による Convolutional Neural Networks for Visual Recognition、Michael Nielsen による Neural Networks と Deep Learning を勧めます。
TensorFlow について更に学習するためには、TensorFlow チュートリアルを見てください。それの総てを必要とはしませんが、TensorLayer を使用できるためにはどのように TensorFlow が動作するかについて基本的な理解は必要です。
TensorLayer is simple
次のコードは TensorLayer の単純な例を示します、tutorial_mnist_simple.py を見てください。私達は多くの単純な関数(like fit() , test() ) を提供しますけれども、詳細を理解して機械学習エキスパートになることを望むのであれば、データ反復ツールボックス (tl.iterate) と sess.run() のような TensorFlow のネイティブ API を使用してネットワークを訓練することを提案します。より詳細は tutorial_mnist.py, tutorial_mlp_dropout1.py と tutorial_mlp_dropout2.py を見てください。
import tensorflow as tf import tensorlayer as tl sess = tf.InteractiveSession() # prepare data X_train, y_train, X_val, y_val, X_test, y_test = \ tl.files.load_mnist_dataset(shape=(-1,784)) # define placeholder x = tf.placeholder(tf.float32, shape=[None, 784], name='x') y_ = tf.placeholder(tf.int64, shape=[None, ], name='y_') # define the network network = tl.layers.InputLayer(x, name='input_layer') network = tl.layers.DropoutLayer(network, keep=0.8, name='drop1') network = tl.layers.DenseLayer(network, n_units=800, act = tf.nn.relu, name='relu1') network = tl.layers.DropoutLayer(network, keep=0.5, name='drop2') network = tl.layers.DenseLayer(network, n_units=800, act = tf.nn.relu, name='relu2') network = tl.layers.DropoutLayer(network, keep=0.5, name='drop3') # the softmax is implemented internally in tl.cost.cross_entropy(y, y_, 'cost') to # speed up computation, so we use identity here. # see tf.nn.sparse_softmax_cross_entropy_with_logits() network = tl.layers.DenseLayer(network, n_units=10, act = tf.identity, name='output_layer') # define cost function and metric. y = network.outputs cost = tl.cost.cross_entropy(y, y_, 'cost') correct_prediction = tf.equal(tf.argmax(y, 1), y_) acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) y_op = tf.argmax(tf.nn.softmax(y), 1) # define the optimizer train_params = network.all_params train_op = tf.train.AdamOptimizer(learning_rate=0.0001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False).minimize(cost, var_list=train_params) # initialize all variables in the session tl.layers.initialize_global_variables(sess) # print network information network.print_params() network.print_layers() # train the network tl.utils.fit(sess, network, train_op, cost, X_train, y_train, x, y_, acc=acc, batch_size=500, n_epoch=500, print_freq=5, X_val=X_val, y_val=y_val, eval_train=False) # evaluation tl.utils.test(sess, network, acc, X_test, y_test, x, y_, batch_size=None, cost=cost) # save the network to .npz file tl.files.save_npz(network.all_params , name='model.npz') sess.close()
以上