スタンドアロンKerasとtf.kerasの違いとは? 〜 #AskTensorFlow より〜TensorFlow 2+Keras(tf.keras)入門

「スタンドアロンKerasとtf.kerasは何が違うのか?」「tf.kerasが、将来的にTensorFlowから削除される可能性はあるのか?」など、TensorFlow 2.0時代のKerasに関する一般的な疑問と、それへのTensorFlowチームメンバーからの回答をまとめる。

» 2019年07月10日 05時00分 公開
[一色政彦デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「TensorFlow 2+Keras(tf.keras)入門」のインデックス

連載目次

 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種類からバックエンドを選択&指定してから使用する仕組みとなっている。

  • TensorFlow: グーグルが開発したフレームワーク
  • Theano: モントリオール大学のLISA/MILA Labが開発したフレームワーク
  • CNTK: マイクロソフトが開発したフレームワーク

 誤解/混乱している人も少なくないと思うが、

  • TensorFlow同梱版の「tf.keras」: インストールはpip install tensorflow
  • 純正版の「スタンドアロンKeras」: インストールはpip install keras

は別々に存在することに注意してほしい。だとすれば、「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」を付けて英語で質問すれば、あなたの疑問もこのシリーズで解説してもらえるかもしれない。

図1 グーグルTensorFlowチームのSoftware EngineerであるAlexandre Passos氏(左)と、同チームのDevelopr AdovocateであるPaige Bailey氏(右) 図1 グーグルTensorFlowチームのSoftware EngineerであるAlexandre Passos氏(左)と、同チームのDevelopr AdovocateであるPaige Bailey氏(右)

 さっそくKerasに関するQ&Aの内容を見ていこう。質問や回答の内容は読み物として成立するように意訳したので、あらかじめご了承いただきたい。以下、会話調で記述する。

Kerasに関するQ&A

スタンドアロンKerasとtf.kerasは何が違うのでしょうか?

 Kerasはtf.kerasとして(図2)、TensorFlow 2.0(2019年7月5日時点ではまだベータ版)に統合されました。

図2 TensorFlow 2.0に同梱されているKerasである「tf.keras」のドキュメント 図2 TensorFlow 2.0に同梱されているKerasである「tf.keras」のドキュメント

 しかし、スタンドアロンKerasは確実に今後も存続します(図3)。

図3 スタンドアロンKerasのドキュメント 図3 スタンドアロンKerasのドキュメント

 tf.kerasではTensorFlow用の最適化が多く施されていますが、それらの機能はまだスタンドアロンKerasには導入されていません。Kerasの発展について、質問や意見、懸念などがある場合は、ぜひKerasユーザー向けSIG(Special Interest Group:興味を持つ人のための特別グループ)(図4)にご参加の上、お知らせください。

図4 Kerasユーザー向けSIG 図4 Kerasユーザー向けSIG

スタンドアロンKerasの全機能は、tf.kerasにも含まれていますか?

 シンプルな回答は「いいえ」になります。

 スタンドアロンKerasは、例えばTheanoバックエンドやCNTKバックエンドなど、tf.kerasが持っていない機能をたくさん持っています。しかし、全ての便利な機能(例えばオプティマイザー、メトリクス、損失関数、レイヤー、モデル構築APIといった、Kerasを使ってモデルを訓練しデプロイするための機能)は、tf.kerasにも含まれていますのでご安心ください。

 もちろん、スタンドアロンKerasとtf.kerasの構文は、全く同じではない(例えば図5)にしても非常に似ています。なので、スタンドアロンKerasに精通しているのであれば、tf.kerasもそのまま使いこなせます。

図5 tf.kerasとスタンドアロンKerasでは例えばモジュール名(階層名)が違う 図5 tf.kerasとスタンドアロンKerasでは例えばモジュール名(階層名)が違う

TensorFlow 2.0は、スタンドアロンKerasにどんな変化をもたらすのでしょうか?

 良い質問ですね。その答えは、「まだ定義されていない」ということになります。

 先ほど述べた通り、Kerasユーザー向けSIG(グループの公式サイト、図6)があり、このグループでKerasの新機能を議論・検討しています。そこで、スタンドアロンKerasとtf.kerasの相互関係を定義していっているわけです。

図6 Keras API SIG公式サイト 図6 Keras API SIG公式サイト

 理想的には、グーグルがtf.kerasに実装した全ての優れた機能が、オープンソースである元々のスタンドアロンKerasへと逆輸入されてほしいです。そのために、ぜひ皆さんにもSIGに参加してご協力していただければ非常にうれしいです。著注:ちなみに、Slackコミュニティーもあります。

tf.kerasには、ベイジアン層(Baysian Layer)のサポートはありますか?

 tf.keras自体には、ベイジアン層の機能は含まれていません。しかし、確率論的推論と統計分析のためのライブラリである「TensorFlow Probability(TFP)」には含まれています。

 TFPには、ベイジアン層に関するさまざまな機能が含まれており、例えばたった1行コードを変えるだけで、ディープニューラルネットワークを、ガウス過程(Gaussian Process)に変更するなど、クールなことがいろいろとできます。

 また、『Bayesian Methods for Hackers(ハッカーのためのベイズ手法)』という著名な入門者向け学習コンテンツのTFP利用版も用意しており、下記リンク先からインターネット上でコードを実行しながら読めます。

図7 『Bayesian Methods for Hackers』のChapter 1 図7 『Bayesian Methods for Hackers』のChapter 1

tf.kerasを使って、カスタムレイヤーを作成できますか?

 もちろん。自由に作成可能です。

 tf.kerasにも標準のレイヤーや、損失関数、メトリクス、オプティマイザー、モデルなど、スタンドアロンKerasと同等のものが同梱されており、それらを簡単に拡張することもできます。

 もしKerasチームと同じレベルで一からカスタマイズをしたいのでれば、tf.keras.layers.Layerクラスを継承して独自のレイヤー(層)を作るだけです(参考:「Custom layers | TensorFlow」、図8)。ちなみに、独自のメトリクスや損失関数も同様に作成可能です。

図8 カスタムレイヤーの作成例(TensorFlow公式サイトより) 図8 カスタムレイヤーの作成例(TensorFlow公式サイトより)

 独自の損失関数やレイヤーを作成したら、TensorFlow AddonsのSIGに参加し、ぜひGitHubの:tensorflow/addons(図9)にPR(プルリクエスト)で提出することで、オープンソースコミュニティーに貢献してもらえるとうれしいです。

図9 『Bayesian Methods for Hackers』のChapter 1 図9 『Bayesian Methods for Hackers』のChapter 1

tf.keras名前空間は、TensorFlow 2.0の将来的なリリースで削除されてしまう可能性はあるのでしょうか?

 もちろん、ありません。

 TensorFlow 2.0(以下、TF 2.0)は安定したパブリックAPIであり、tf.kerasだけでなく、TF 2.0 APIに含まれる各シンボルは、少なくともTF 3.0になるまでは存続する予定です。

 それだけでなく、TF 1.0から取り除かれたシンボルでさえも、tf.compat.v1モジュール(図10)をインポートすることで継続的に利用可能です。

図10 tf.compat.v1モジュールの公式ドキュメント 図10 tf.compat.v1モジュールの公式ドキュメント

 よって、既にTF 2.0で利用中のものは、少なくともTensorFlowのバージョンが2.Xである限りは使い続けられます。安心してください。

tf.kerasモデルもSavedModel形式で出力できますか?

 はい。tf.kerasで作成したモデルは、SavedModel形式(=TensorFlowの標準出力フォーマット)でエクスポートできます。

 SavedModel形式なので、

など、TensorFlowエコシステムにおけるさまざまな運用環境で使用可能です。

 実はSavedModel形式は、TensorFlow 2.0における最も大切な機能の一つとして開発に力を入れています。われわれTensorFlowチームは、TensorFlowのモデルを持っていきたい場所であればどんなプラットフォームにでもどんなデバイスにでも、しかもできるだけ簡単に、エクスポートできるようにしたいのです。

 ちなみに、SavedModel形式で保存された出力モデルであれば、それをPython上のtf.kerasモデルに戻し、それを使って推論するようなことも可能です(図11)。「本当にシームレスで使いやすい」と感じていただけると思います。

図11 SavedModel形式の出力モデルをPython上のtf.kerasモデルに戻して推論を実行しているサンプルコード(公式サイトより) 図11 SavedModel形式の出力モデルをPython上のtf.kerasモデルに戻して推論を実行しているサンプルコード(公式サイトより)


 以上が「TensorFlow 2.0 and Keras (#AskTensorFlow) - YouTube」の全内容である。まとめると、TensorFlowを使うユーザーであれば、tf.kerasを使っておけば、何も問題ないということである。特に初心者はtf.kerasから始めるのがお勧めだ。Please follow on Twitter @DeepInsiderJP.

「TensorFlow 2+Keras(tf.keras)入門」のインデックス

TensorFlow 2+Keras(tf.keras)入門

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。