Help us understand the problem. What is going on with this article?

TensorFlowのinitialize_all_variablesがDeprecatedになった件

More than 3 years have passed since last update.

先日(2016/11/29)TensorFlowの最新版r0.12がリリースされました。

TensorFlow r0.11で開発していたアプリケーションを本番リリース前のテスト環境として用意したr0.12で実行したところ、起動時に見覚えのない警告メッセージが表示されました。

WARNINGの内容

WARNING:tensorflow:From :1 in .: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use tf.global_variables_initializer instead.

initialize_all_variablesは2017/03/02以降に廃止される予定とのこと。

initialize_all_variablesはチュートリアルやサンプル実装、それにネットの記事などで頻繁に見かける変数初期化命令ですが、3ヶ月後には使えなくなる恐れがあります。

新しい初期化命令

上記WARNINGに記載されている通り、r0.12からはglobal_variables_initializerを使用せよとのこと。

r0.12で試してみた

>>> tf.__version__
'0.12.0-rc0'

まずはもう一度従来の初期化命令であるinitialize_all_variablesを実行。

>>> tf.Session().run(tf.initialize_all_variables())

WARNING:tensorflow:From <stdin>:1 in <module>.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.

やはりWARNING発生。

次に新しい初期化命令のglobal_variables_initializerを実行。

>>> tf.Session().run(tf.global_variables_initializer())
>>> 

こちらはWARNINGも無く正常に実行終了。

r0.11でも試してみた

>>> tf.__version__
'0.11.0'

まずは従来の初期化命令であるinitialize_all_variablesを実行。

>>> tf.Session().run(tf.initialize_all_variables())
>>> 

これは当然正常終了する。

次に新しい初期化命令のglobal_variables_initializerを実行してみる。

>>> tf.Session().run(tf.global_variables_initializer())

AttributeError: module 'tensorflow' has no attribute 'global_variables_initializer'

global_variables_initializerはr0.11ではまだ実装されていないためエラーになる。

まとめ

r0.11を使い続けるならinitialize_all_variablesを使うしかない。
r0.12に乗り換えるならglobal_variables_initializerに早めに変更しよう。

どうしても共通化したい場合

r0.11とr0.12でどうしても共通化したければinitialize_variablesを使おう。
この命令は、初期化すべき変数をリストで指定する必要があるが、
少なくともr0.10からr0.12までは互換性が保たれておりDeprecatedにもなっていないので、
当面は使い続けられるらしい。

r0.12のその他の変更点

こちらからどうぞ。
TensorFlow v0.12.0 RC0

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away