Translate

2017年1月19日木曜日

Keras の概要を読んで、邪推する

TensofFlowを勉強している私に
簡単にコードが書ける Kersa というものがあり、
TensorFlowをラップしているらしいよ
と教えてくれる人がいたので
Kerasの概要を勉強してみた。

TensorFlow のときとは違って既に日本語化ドキュメントが
用意されており、
6~7割TensorFlowサイトをGoogle翻訳して読んでいたので
サクリと読むことができた。

TensorFlowのAPIをラップしたライブラリなので
基本機械学習フレームワークであるのだけど、
たしかに

むっちゃ簡単

なのである。

何が簡単かというと、なによりコードが読みやすい


TensorFlowは設計者の意図を理解するまで
なかなか把握しにくいAPIになっている。

高速なC/C++実装をPythonコードでモデル記述し、セッションを実行するため、
TensorFlow は上から下に必ずしも処理されない。

しかもPython上のリテラルをC/C++実装上の変数・配列格納領域へrunする時に渡す
というところが、ベタ読みする開発者にとって無駄としか思えない。


だが Kerss のライブラリは、
オブジェクト指向
設計を行っている。


Modelをインスタンス化して、
シーケンシャルな多層パーセプトロンの場合
順番にインスタンス化したLayerインスタンスadd()していき、
できあがったModelインスタンスに対して、
compile()/fit()で学習、evaluate()で評価する。

上から下に読めば簡単に理解できる

Layerは独自のものも作れるコンポジットな設計だし、
add()して一気に処理するアタリはApplet/Swingなどの設計と同じだ。



IBMやSBのWatsonや
Google API、
Microsoft Cognitive APIなどの他力を嫌う
オンプレミス至上主義の多い日本企業では
機械学習の独自実装はじつは喉から手が出るほど欲しい


で TensorFlow をためそうとするのだけど、
先程書いたとおり
コードの可読性が極めて悪い

しかもキチンと機械学習を理解していないと
何をインプットにして、何をアウトプットにすれば良いのか
どのパターンでどういうモデルを使い分ければ良いのかすら
わからない..

勉強するには TensorFlowのチュートリアルコード
読まないといけないのだけど、
TensorFlowはガンガンバージョンアップして
チュートリアルコードがdeprecatedされた関数で
動かないものも少なくない。

しかもGoogleの提供するTensorFlowサイトは
機械学習に関する知識ベースで解説を組んでいて
こまかいどの変数がどういう意味を持ってここで加算してるのかとか
ちくちく説明してくれていない..


そこでこのKeras
そらみんな飛びつくよなあ..



個人的には TensorFlow の Java実装になってくれないか..

!そうか
Kerasの狙いは

Java機械学習標準ライブラリ狙い

か!


..ありうる話だ。


という与太話で記事を終えるのも申し訳ないので
KerasサンプルコードのGitてっぺんにある README.mdを翻訳した
以下にリストを残しておく。

参照の際は、
At your own riskでお願いします。
----

Keras サンプルディレクトリ


[addition_rnn.py]
2つの(文字列としての)数値の加算実行によるSequence-to-Sequence 実装の学習

[antirectifier.py]
Kerasにおけるカスタムレイヤの記述方法のデモ

[babi_memnn.py]
文章読解のための、bABlデータセット上のメモリネットワークのトレーニング


[babi_rnn.py]
文章読解のための、bAbIデータセット上の 2 分岐 recurrent networkのトレーニング

[cifar10_cnn.py]
CIFAR10の小さな画像データセットを使った、シンプルなディープCNNのトレーニング

[conv_filter_visualization.py]
入力スペースの勾配降下法によるVGG16フィルタの可視化

[conv_lstm.py]
畳み込みLSTMネットワークを使ったデモ

[deep_dream.py]
Kerasの深い夢(実行例)

[image_ocr.py]
畳み込みスタックとそれに続く反復スタックとCTCログ損失機能をトレーニングすることによる光学式文字認識(OCR)の実行

[imdb_bidirectional_lstm.py]
IMDBセンチメント分類タスク上において双方向LSTMをトレーニング

[imdb_cnn.py]
Convolution1Dをテキスト分類に使用するデモ

[imdb_cnn_lstm.py]
IMDBセンチメント分類タスクにおいてrecurrent stack networkが後続する畳み込みスタックのトレーニング

[imdb_fasttext.py]
IMDBセンチメント分類タスクにおけるFastTextモデルのトレーニング

[imdb_lstm.py]
IMDBセンチメント分類タスクにおけるLSTMをトレーニング

[lstm_benchmark.py]
IMDBセンチメント分類タスクにおいて異なるLSTM実装を比較

[lstm_text_generation.py]
ニーチェの著作からテキストを生成

[mnist_acgan.py]
MNISTデータセットにおけるAC-GAN(Auxiliary Classifier GAN)の実装

[mnist_cnn.py]
MNISTデータセットを使った簡単なconvnetの作成

[mnist_hierarchical_rnn.py]
MNIST数字分類において階層型RNN(HRNN)をトレーニング

[mnist_irnn.py]
Le氏ほかによる論文「整流化された線形単位の再帰的ネットワークを初期化する方法」における pixcel-by-pixcel のシーケンシャルなMNIST実験の再現

[mnist_mlp.py]
MNISTデータセットにおける単純なディープな多層パーセプトロンのトレーニング

[mnist_net2net.py]
「Net2Net:知識移転による加速学習」におけるMNISTによるNet2Net実験の再現

[mnist_siamese_graph.py]
MNISTデータセットからの数字のペアを入力とした Siamese(シャム人の) 多層パーセプトロンをトレーニング

[mnist_sklearn_wrapper.py]
sklearnラッパ使用方法のデモ

[mnist_swwae.py]
MNISTデータセットの残りのブロックに基づいた スタックされたWhat-Where AutoEncoderのトレーニング

[mnist_transfer_cnn.py]
翻訳学習玩具の例

[neural_doodle.py]
ニューラルいたずら書き

[neural_style_transfer.py]
ニューラルスタイル変換

[pretrained_word_embeddings.py]
凍結したKeras 埋め込みレイヤに事前トレーニング済みの単語埋め込み(GloVe埋め込み)をロードし、20 ニュースグループデータセット上のテキスト分類モデルの訓練への使用

[reuters_mlp.py]
ロイターニュースワイヤトピック分類タスクにおける簡単なMLPのトレーニングと評価

[stateful_lstm.py]
stateful RNNsを使った長いシーケンスを効率的にモデル化する方法のデモ

[variational_autoencoder.py]
variational autoencoder 構築方法のデモ

[variational_autoencoder_deconv.py]
Kerasにおけるデコンボリューションレイヤを使ったvariational autoencoderの構築方法のデモ

-------


p.s.

映画「君の名は。
を見た人はほぼ100%
売れるニオイしかしない
と思ったはずだと思うけど、

TensorFlowをかじった人が
この
Kerasを読んだら
きっとTensorFlowより
流行るニオイしかしない
と思うはず..

0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...