TensorFlow/KerasかPyTorchか?〜モデル構築、その前にーWebアプリ制作日記その13

AIアプリ制作
PyTorchのTorchとはたいまつ

ディープラーニングを実装する場合、
ゼロからコードを書くのは非効率なため、専用のフレームワークを用いるのが一般的だ。
(フレームワークの考察ブログは、こちら
現在、主要なものは、次の4つといわれる。

TensorFlow: 2015年・Google。この中では一番有名。2019年10月1日にTensorFlow 2.0が正式リリースされ、TensorFlowの中にKerasが統合され、Kerasが標準的な実装方法となった。
PyTorch: 2016年・Facebook。新顔だが、人気急上昇中。
Keras: 2015年・Google社員開発。使いやすくて簡単で初心者向け。
Chainer: 2015年・日本のPreferred Networks。残念だが、2019年12月、新機能開発を終了し、PyTorchに移行することが発表された。

なので、現在は、

Google 製「TensorFlow/Keras」かFacebook 製「PyTorch」か

この2択といっていい。

実際、
巣籠悠輔『詳解ディープラーニング』も、

画像処理ではなく時系列データ処理に特化。NLP学習者には必須の一冊!

サブタイトルが、
「TensorFlow/Keras・PyTorchによる時系列データ処理」
と、現在の2強のフレームワークをカバーする形になっている。

で、どちらを使うのか?

今回、キカガク長期コースでは
PyTorchを使って、と思っていたが、
講師から、
Kerasを、というアドバイスがあったので、
TensorFlowのKerasを使って、モデル構築することになった。

で、そのKeras
モデル構築には2パターンあって(*その話は、こちら)
今回は、
「Function API」
を使う。

Function = 関数(*1) ってわかるけど、APIってなんやろ?(また、そこ?)

どうも細かいことが気になってしかたない。
(だからなかなか先に進まない。って昨日も同じこと言った!)

Kerasの公式ドキュメントの説明を読んでみる。

The Keras functional API is the way to go for defining complex models, such as multi-output models, directed acyclic graphs, or models with shared layers.
(Google 翻訳:Keras 関数型APIは,複数の出力があるモデルや有向非巡回グラフ,共有レイヤーを持ったモデルなどの複雑なモデルを定義するためのインターフェースです。)
With the functional API, it is easy to reuse trained models: you can treat any model as if it were a layer, by calling it on a tensor. Note that by calling a model you aren’t just reusing the architecture of the model, you are also reusing its weights.
(Google 翻訳: 関数型APIを使用すると、トレーニング済みのモデルを簡単に再利用できます。テンソルで呼び出すことにより、モデルをレイヤーのように扱うことができます。 モデルを呼び出すことで、モデルのアーキテクチャを再利用するだけでなく、その重みも再利用することに注意してください。)

要約すると、

複雑なモデルを作るときに使うもので、
コードをゼロから書く必要がなく、
学習済みのモデルを転移学習できるもの

だということだ。

でも、API ってなに?(←もうええやろ)

API( Application Programming Interface )のうち、
アプリ(Application)プログラミング(Programming)はいいとして、
インターフェース(Interface)とは、

パソコンのキーボードやマウス、テレビのリモコンや駅の券売機などのように、
人間とコンピューターが接する部分のこと。

まとめると、API とは、

プログラマーの代わりにアプリケーションに情報や指示を出してプログラミングしてくれるような役割を果たすもの、

という理解でよさそうだ。

さあ、いよいよ本番。

from tensorflow.keras import models, layers, Input

で、モデル構築を始めよう。

*1 プログラミングにおける関数の説明は、この記事がわかりやすい。こちら

Follow me!

PAGE TOP