「スタンドアロンKerasとtf.kerasは何が違うのか?」「tf.kerasが、将来的にTensorFlowから削除される可能性はあるのか?」など、TensorFlow 2.0時代のKerasに関する一般的な疑問と、それへのTensorFlowチームメンバーからの回答をまとめる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Kerasといえば、TensorFlowをイメージする人が多いだろう。実際、大半のKerasユーザーはそのバックエンドとしてTensorFlowを使っているのではないだろうか。
現実的にTensorFlowとKerasの結び付きは強い。最新のTensorFlow(次期バージョンの2.0も含む)では、Pythonコードでimport tensorflow as tfした後であれば、tf.kerasからKerasの各機能にすぐにアクセスできる。これは、TensorFlow内にKerasの機能が標準で同梱されているためだ。
このTensorFlow同梱版のKerasはtf.kerasと呼ばれている。
しかし、元々のKerasは(TensorFlow専用ではなく)下記の3種類からバックエンドを選択&指定してから使用する仕組みとなっている。
誤解/混乱している人も少なくないと思うが、
は別々に存在することに注意してほしい。だとすれば、「tf.kerasとスタンドアロンKerasでは、何が異なるのか?」が気になってくる。※2020/05/13追記:現在は、スタンドアロンKeras(=マルチバックエンドKeras)はメンテナンスモードとなって、tf.kerasがメインになっており、本稿の内容は一部異なってきているので注意してほしい。詳しくは「マルチバックエンドKerasの終焉、tf.kerasに一本化」を参照してほしい。
また、Kerasの作者であるFrançois Chollet(@fchollet)氏は、今はグーグル社員である。ということは、「今後のKerasはtf.kerasのみになってしまう可能性があるのか?」と、スタンドアロンKerasの将来性についての疑問も生じる。
上記の通り、Kerasは少し複雑な提供形態や開発状況になっているので、さまざまな疑問が出てくる状況である。このような数々の疑問点について、「YouTube:TensorFlowチャンネル」の#AskTensorFlowシリーズ最新の配信動画(下記リンク先)で、Q&A形式で回答していた。
知りたい人が多い内容だと思うので、本稿ではその内容を文章で書き起こし、筆者なりにまとめた。
ちなみに、#AskTensorFlowシリーズは、ディープラーニングや機械学習の初心者が視聴するのにちょうどよいレベルのTensorFlow紹介動画であり、定期的に発信されているので、興味がある方はぜひチェックしてみてほしい。なお、Twitterでハッシュタグ「#AskTensorFlow」を付けて英語で質問すれば、あなたの疑問もこのシリーズで解説してもらえるかもしれない。
さっそくKerasに関するQ&Aの内容を見ていこう。質問や回答の内容は読み物として成立するように意訳したので、あらかじめご了承いただきたい。以下、会話調で記述する。
Kerasはtf.kerasとして(図2)、TensorFlow 2.0(2019年7月5日時点ではまだベータ版)に統合されました。
しかし、スタンドアロンKerasは確実に今後も存続します(図3)。
tf.kerasではTensorFlow用の最適化が多く施されていますが、それらの機能はまだスタンドアロンKerasには導入されていません。Kerasの発展について、質問や意見、懸念などがある場合は、ぜひKerasユーザー向けSIG(Special Interest Group:興味を持つ人のための特別グループ)(図4)にご参加の上、お知らせください。
シンプルな回答は「いいえ」になります。
スタンドアロンKerasは、例えばTheanoバックエンドやCNTKバックエンドなど、tf.kerasが持っていない機能をたくさん持っています。しかし、全ての便利な機能(例えばオプティマイザー、メトリクス、損失関数、レイヤー、モデル構築APIといった、Kerasを使ってモデルを訓練しデプロイするための機能)は、tf.kerasにも含まれていますのでご安心ください。
もちろん、スタンドアロンKerasとtf.kerasの構文は、全く同じではない(例えば図5)にしても非常に似ています。なので、スタンドアロンKerasに精通しているのであれば、tf.kerasもそのまま使いこなせます。
良い質問ですね。その答えは、「まだ定義されていない」ということになります。
先ほど述べた通り、Kerasユーザー向けSIG(グループの公式サイト、図6)があり、このグループでKerasの新機能を議論・検討しています。そこで、スタンドアロンKerasとtf.kerasの相互関係を定義していっているわけです。
理想的には、グーグルがtf.kerasに実装した全ての優れた機能が、オープンソースである元々のスタンドアロンKerasへと逆輸入されてほしいです。そのために、ぜひ皆さんにもSIGに参加してご協力していただければ非常にうれしいです。※著注:ちなみに、Slackコミュニティーもあります。
tf.keras自体には、ベイジアン層の機能は含まれていません。しかし、確率論的推論と統計分析のためのライブラリである「TensorFlow Probability(TFP)」には含まれています。
TFPには、ベイジアン層に関するさまざまな機能が含まれており、例えばたった1行コードを変えるだけで、ディープニューラルネットワークを、ガウス過程(Gaussian Process)に変更するなど、クールなことがいろいろとできます。
また、『Bayesian Methods for Hackers(ハッカーのためのベイズ手法)』という著名な入門者向け学習コンテンツのTFP利用版も用意しており、下記リンク先からインターネット上でコードを実行しながら読めます。
もちろん。自由に作成可能です。
tf.kerasにも標準のレイヤーや、損失関数、メトリクス、オプティマイザー、モデルなど、スタンドアロンKerasと同等のものが同梱されており、それらを簡単に拡張することもできます。
もしKerasチームと同じレベルで一からカスタマイズをしたいのでれば、tf.keras.layers.Layerクラスを継承して独自のレイヤー(層)を作るだけです(※参考:「Custom layers | TensorFlow」、図8)。ちなみに、独自のメトリクスや損失関数も同様に作成可能です。
独自の損失関数やレイヤーを作成したら、TensorFlow AddonsのSIGに参加し、ぜひGitHubの:tensorflow/addons(図9)にPR(プルリクエスト)で提出することで、オープンソースコミュニティーに貢献してもらえるとうれしいです。
もちろん、ありません。
TensorFlow 2.0(以下、TF 2.0)は安定したパブリックAPIであり、tf.kerasだけでなく、TF 2.0 APIに含まれる各シンボルは、少なくともTF 3.0になるまでは存続する予定です。
それだけでなく、TF 1.0から取り除かれたシンボルでさえも、tf.compat.v1モジュール(図10)をインポートすることで継続的に利用可能です。
よって、既にTF 2.0で利用中のものは、少なくともTensorFlowのバージョンが2.Xである限りは使い続けられます。安心してください。
はい。tf.kerasで作成したモデルは、SavedModel形式(=TensorFlowの標準出力フォーマット)でエクスポートできます。
SavedModel形式なので、
など、TensorFlowエコシステムにおけるさまざまな運用環境で使用可能です。
実はSavedModel形式は、TensorFlow 2.0における最も大切な機能の一つとして開発に力を入れています。われわれTensorFlowチームは、TensorFlowのモデルを持っていきたい場所であればどんなプラットフォームにでもどんなデバイスにでも、しかもできるだけ簡単に、エクスポートできるようにしたいのです。
ちなみに、SavedModel形式で保存された出力モデルであれば、それをPython上のtf.kerasモデルに戻し、それを使って推論するようなことも可能です(図11)。「本当にシームレスで使いやすい」と感じていただけると思います。
以上が「TensorFlow 2.0 and Keras (#AskTensorFlow) - YouTube」の全内容である。まとめると、TensorFlowを使うユーザーであれば、tf.kerasを使っておけば、何も問題ないということである。特に初心者はtf.kerasから始めるのがお勧めだ。Please follow on Twitter @DeepInsiderJP.
Copyright© Digital Advantage Corp. All Rights Reserved.