3

をmulti_rnn_cell、私はこのように、多層-RNNを作成します。Tensorflowエラー:初期化されていない値を使用しようとすると、私のモデルファイルで

#RNN initialization part 
cell = tf.contrib.rnn.GRUCell(self.global_dim, kernel_initializer=self.xavier_initializer) 
self.GRU = tf.contrib.rnn.MultiRNNCell([cell for _ in range(self.rnn_layers)]) 

私は別の関数で、このセルを呼び出す:

def RNN(self): 
    state = self.initRNNState() 
    inputs = tf.reshape(self.itemVec, [self.num_steps, self.batch_size, self.global_dim]) 
    hiddenState = [] 

    for time_step in range(self.num_steps): 
     _, state = self.GRU(inputs[time_step], state) 
     hiddenState.append(tf.reshape(state[-1], [self.global_dim])) #Store last layer 

    return tf.convert_to_tensor(hiddenState) 

私のメインのファイルには、私がsess.run(tf.global_variables_initializer())sess.run(tf.local_variables_initializer())の両方を試してみましたが、同じERORを得ながら:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value multi_rnn_cell/cell_0/gru_cell/gates/kernel 
    [[Node: multi_rnn_cell/cell_0/gru_cell/gates/kernel/read = Identity[T=DT_FLOAT, _class=["loc:@multi_rnn_cell/cell_0/gru_cell/gates/kernel"], _device="/job:localhost/replica:0/task:0/device:GPU:0"](multi_rnn_cell/cell_0/gru_cell/gates/kernel)]] 
    [[Node: Neg/_11 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_1304_Neg", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]] 

なぜ私のgruセルが初期化されていないのだろうか。

答えて

2

あなたは完全なコードを示さなかったが、私はあなたがsess.run(tf.global_variables_initializer())最初を呼び出し、その後、RNN()方法していることを確信しています。 RNN()がグラフに新しいノードを追加しているため、他のノードと同様に初期化する必要があるため、これは機能しません。

解決策:完全な計算グラフを作成してから、イニシャライザを呼び出すようにしてください。

+0

ええ、あなたの推測は正しいです!私は自分のグラフをどのように走らせるか知っていると思う。 –

関連する問題