TensorFlowの変数初期化エラー – FailedPreconditionError –

TensorFlowにおいて変数を使用する場合には、変数の定義だけではなく変数の初期化が必要となります。

今回はinitialize_all_variablesの実行をモデル定義の途中で行ったため、変数初期化のエラー”FailedPreconditionError: Attempting to use uninitialized value”ではまってしまったので、解決策をメモしておきます。

 

 

 

TensorFlow上での変数の使用

TensorFlowではモデルの学習のために変数を使用する必要があります。

TensorFlow上で変数を利用するためには次の二つを行う必要があります。

  • tf.Variable() による変数の定義
  • tf.initialize_all_variables() 等による変数の初期化

 

変数の定義方法について詳しくは下記の記事を参照してください。

TensorFlowの基本文法

 

変数の初期化を行わずに変数を使用すると、変数が初期化されていないというエラーが出ます。

しかし今回は tf.initialize_all_variables()を実行しても、変数初期化のエラーが出てしまいました。

 

テストコード

下記に変数初期化エラーが出てしまったコードの抜粋を示します。

 

上記のコードを実行すると次のようなエラーが出てきます。

内容は初期化されていない変数 Variable_1 を使用しようとしているとのことでした。

 

しかしコード内では tf.initialize_all_variables()を実行しているので、変数は初期化されるはずです。

 

 

解決策

上記の問題を解決するために、 tf.initialize_all_variables()の定義を調べました。 tf.initialize_all_variables()の定義は下記のリンクから見ることができます。

GitHub : TensorFlow /python/ops/variables.py

 

定義を調べたところTensorFlowの tf.initialize_all_variables()では変数の初期化を次のように行っているみたいです。

  1. tf.Variableによって変数を定義する
  2. 定義した変数はすべてコレクション GraphKeys.GLOBAL_VARIABLES に追加される
  3. global_variables() によっての GraphKeys.GLOBAL_VARIABLES内容を取得する
  4. 取得した内容を variables_initializer()に渡し、全ての変数を初期化する

 

つまり、 tf.initialize_all_variables()を実行する前に定義した変数しか初期化されないということです。

 

そこで今回のように tf.initialize_all_variables()を実行しても変数初期化のエラーが出る原因は、 tf.initialize_all_variables()の実行をモデル作成の途中で行ってしまったことです。

そのため tf.initialize_all_variables()の実行をモデルの作成終了後に行えば正しく変数の初期化が行われます。

 

まとめ

  • 変数の初期化を行わずに計算を実行すると、 FailedPreconditionError: Attempting to use uninitialized value というエラーが発生する
  • tf.initialize_all_variables()はモデル作成の途中ではなく、モデル作成終了後に行う

 

関連記事

ニューラルネットワーク・ディープラーニングのまとめ

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA