久々の投稿になります.しばらくは,tensorflow 2系の使い方を自分用のメモ代わりにでも書いていくつもりです.
・なんでバージョンアップしたの?
tensorflowは1系から2系へのアップデートで大きく使用方法が変わりました.そもそもなぜ使用方法が変わったのかというと,pytorchにシェアを大きく奪われたためです.tensorflow 1.x系に比べると,pytorchのほうがpythonらしくコーディングが可能であり,APIも非常に直観的であったために多くのユーザがpytorchを使用するようになりました.これを受け,tensorflowはデザインパターンを大きく変更し,1系から2系にアップデートされることになりました.
・tensorflow 1系と2系の違い
tensorflowが1から2にアップデートされたことで,大きく以下の要素が変わりました.
- Eager Modeの通常化
- Sessionとplaceholderの削除
- 基本的にkeras APIで操作することに
- サポートの増強
それぞれについて説明していきます.
– Eager Mode
Eager Modeとは,簡単に言うと「コードを書いたら即実行される」仕組みのことです.tensorflow 1系の仕組みを思い出してほしいのですが,基本的にtensorflow 1系では
#セッションの定義
session=tf.Session()
#5 + 1 の計算式を定義 (ここでは,5 + 1の結果は計算されない!)
calc1=tf.add(tf.constant(5),tf.constant(1))
#計算式の実行
session.run(calc1) #ここで,5 + 1が実行される.
#セッション終了
session.close()
このような形で実行をしていました.ここで大切なのは,計算式を定義した後に計算式を明示的に実行するまでは何の計算も行われないということです.この仕組みを「define-and-run」といいます.
しかし,通常のpythonコードでは,計算式を定義した時点で計算は実行されます.先ほどの例をpythonで書くと,
calc1=5+1 # この時点でcalc1には5 + 1の結果である6が格納される
となります.こちらの場合には,calc1での式の定義と同時に式が実行されています.これを「define-by-run」といいます.つまり,tensorflow 2系は,よりpythonらしい書き方が可能になったのです.実際に,tensorflow 2系では先ほどの例は以下のように書けます.
calc1=tf.add(tf.constant(5),tf.constant(1))
# この時点でcalc1には5 + 1の結果である6が格納される
pythonのコードとほとんど同じ感覚で記述することが可能になったのです!
– Sessionとplaceholderの削除
これは,先ほど説明した「define-by-run」への変更によって消えたものです.「define-and-run」では,定義した式を実行するための処理(=Session)と,定義した式へ未知数を挿入する場所(=placeholder)が必要なのですが,「define-by-run」では,これらはいらないため,削除されました.
– 基本的にkeras APIで操作することに
tensorflow 1系では,高級APIが複数存在しました.例えば,畳み込み関数1つでも,
- tf.layers.conv2d
- tf.nn.conv2d
- tf.keras.layers.Conv2D
等,多くの手法が存在していたのです.このような状態ではプログラマごとに使用するAPIが変わり,プログラムの一貫性が保てなくなってしまいます.そのため,2系では,高級APIがすべてtf.kerasに集約されました.
– サポートの増強
tensorflow 2系では,1系でも存在したTensorBoard以外にもTensorFlow Hubなどのサポートを追加しています.サービスの詳しい内容は後述します.
・tensorflow 2系の全体像
tensorflow 2系の全体図は以下のようになっています.

図において,灰色がソースコードに関係する部分,黄色が学習方法,オレンジがtensorflowが提供するサービス,青色がそれ以外を示します.
図を見てみると,プログラムの方法としては,
- tf.kerasを使った方法
- premade estimatorsを使う方法
の2つがあり,モデルは自分で作成するかTensorFlow Hubからダウンロードしてくることができることが分かります.プログラムの方法については,基本的にkerasを使うことになるので,estimatorsのことはあまり気にしなくてもいいです.
tensorflow 2系では,実際のサービスとしてデプロイする方法が複数存在することが分かります.それぞれの詳しい内容は別の回で紹介する予定なので,楽しみにしておいてください.
・まとめ
いかがでしたか?久々に本サイトを更新したのでダメダメなところがあるかもしれませんが,ご容赦ください.
- tensorflow 2系では「define-by-run」がデフォルトになった
- define-by-run: 式を定義してすぐに式が計算される手法
- tensorflow 2系では基本的にKeras APIを使用してソースコードを作成する.