ハードウェア技術者のスキルアップ日誌

某家電メーカーの技術者がスキルアップのために勉強したことを記録するブログです

Tensorflow 2.X でTensorflow 1.Xで書かれたコードを動かす方法

前回Tensorflowの使い方について記事にしました。

masaeng.hatenablog.com

しかし、よく調べてみると、この記事で書いたことはTensorflow 1.Xについての話で、Tensorflow 2.Xでは考え方が変わっていることが分かりました。

具体的にはTensorflow 1.XはDefine and Run(グラフを定義した後にまとめて実行)だったのに対し、Tensorflow 2.XはDefine by Run(グラフの構築とデータを渡して実行するのを同時に行う)になっています。Define by RunはEager Executionとも言うそうです。

例えば、Tensorflow 1.Xで使われていたPlaceholderはTensorflow 2.Xではなくなっており、定義するとエラーとなります。また、計算実行時に使っていたSessionも使う必要がなくなっています。

となると、疑問が湧きます。
Tensorflowのバージョンを2.Xに上げた後に、1.Xで書かれたコードを実行したいときはどうすればいいのか?
これについて調べてみたので、備忘録として書いておきます。

 

Tensorflow 1系で動かすには?

結論としては import tensorflow as tfとしているところを以下のように置き換えればOKです。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

他のpythonスクリプトをimportしている場合はそちらでもtensorflowをimportしている場合があるため、すべてこのように修正してください。

 

Kerasの場合は?

Tensorflow2.XではKerasはTensorflowの高レベルAPIとして組み込まれており、スタンドアローンとして使用する(import Keras)使い方だとエラーが発生しました。

以下はエラーの一例

RuntimeError: It looks like you are trying to use a version of multi-backend Keras that does not support TensorFlow 2.0. We recommend using `tf.keras`,or alternatively, downgrading to TensorFlow 1.14.

 

TensorflowのAPIとしてKerasを使用するには以下のようにします。

from tensorflow import keras
from tensorflow.keras import ***

TensorflowのAPIとしてのKeras

 

高レベルAPIとしての使い方であればTensorflow1.X, 2.Xともに同じ記述で動くとのことです。もしTensorflow 2系でKerasを動かしたときにエラーがでればスタンドアローンKerasを使っていないか確認してみてください。スタンドアローンとTensorflowのAPIで関数名が若干変わっているものがあるようです。

 

 まとめ

Tensorflow1系で書かれたコードをTensorflow2系で動かすための方法を記載しました。もし同じことで悩んだ方がおられたときに助けになれば幸いです。