13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Tensorflow 2で1系記法のCNNを動かす方法

Last updated at Posted at 2020-10-11

想定読者

  • Tensorflow 2の環境で1系のコードで書かれたCNN(畳み込みNN)を動かそうと試行錯誤している人

前提

実行環境

  • macOS High Sierra
  • Python 3.7.8
  • Tensorflow 2.3.1

CNNのコードについて

コードは諸事情により載せませんが、

  • MNISTのデータ取得にtf.keras.* を使用
  • その他 tf.nn.*, tf.train.*, tf.* を使用

して、CNNを実行しているコードです。

1系から2系への主な変更点

Tensorflow 1から2への主な変更点については、 こちら 等いろいろな記事を拝見しましたが、CNNを実行する上で直接影響のあったものは以下でした。

  • Eager Executionのデフォルト化
  • Session, Placeholderの廃止

※ CNNの実装方法によっては他にもあるかもしれませんがその点はご容赦ください。

1系記法のコードを2系で動かす方法

1系記法のCNNを2系で動かす(ためにコードを変更する)方法は以下の3つがあるようです。

  1. 変更のあったAPIを地道に書き換える
  2. アップデートスクリプトを活用する
  3. 2系挙動を無効化する

1. 変更のあったAPIを地道に書き換える

賢い方法ではありませんが、変更箇所が少なければ該当箇所を地道に書き換えるというのもなくはないかと思います。CNNを動かすために要した修正を以下に示します。

(1) Eager Executionの無効化

import tensorflow as tf の直後に以下を追記し、Eager Executionを無効化する。

tf.compat.v1.disable_eager_execution()

(2) いくつかのAPIの記法変更

コード内の '1系' の列に該当するAPIを '2系' にある記載の通りに変更する。

# 1系 2系
1 tf.placeholder tf **.compat.v1.**placeholder
2 tf.random_uniform tf.random.uniform
3 tf.add_to_collection tf **.compat.v1.**add_to_collection
4 tf.get_collection('costs') tf **.compat.v1.**get_collection
5 tf.train.AdamOptimizer tf **.compat.v1.**train.AdamOptimizer
6 tf.Session() tf **.compat.v1.**Session()

#2のような単純に compat.v1 を追加ではないものもありました。
上記以外で compat.v1 の追加が必要なAPIについては、Tensorflow Module: tf.compat.v1をご参照ください。

2. アップデートスクリプトを活用する

コードをTensorFlow 2に自動的にアップグレードするを参考に、アップデートスクリプトを用いて、コードを2系記法に変換する方法もあるようです。1の手動変換よりは安全かと思いますが、一部手動変換を要する箇所もあるような記述もあり、全自動ではなさそうです。

3. 2系挙動を無効化する

TensorFlow1コードをTensorFlow2に移行しますによると、
Tensorflowのインポート文

import tensorflow as tf


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

のように変更して2系挙動を無効化することで、1系記法のコードが実行できるようになるようです。(私のコードでは実行が確認できました)

終わりに

3の方法で動いたら一番嬉しいですね。
私は1をした後に3の方法を見つけたのでそういう人が出ないようにこれを書きました。
どんどんTensorflowに慣れていきたいものです。

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?