Edited at

TensorFlowのinitialize_all_variablesがDeprecatedになった件

More than 1 year has 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