2017-09-24 9 views
1

Tensorflow初心者ここに!変数は時間の経過とともに訓練され、プレースホルダはモデルの列として変化しない入力データ(入力画像やそれらの画像のクラスラベルなど)に使用されることを理解しています。tf.zerosとRNN初期状態としてのtf.placeholder

私はTensorflowを使用してRNNの前方伝搬を実装しようとしています。どのタイプのRNNセルの出力を保存するべきか疑問に思っています。 numpyのRNNの実装では、それは反復np.zerosアレイに出力を保存

hiddenStates = np.zeros((T, self.hidden_dim)) #T is the length of the sequence

を使用します。

TFの場合、どちらを使用すればいいですか?tf.zerosまたはtf.placeholder?

この場合のベストプラクティスは何ですか?私はtf.zerosを使うのはいいはずだが、二重チェックしたいと思っている。

答えて

2

まず、TensorflowのすべてがTensorであることを理解することが重要です。したがって、ある種の計算(たとえばoutputs = rnn(...)のようなrnnの実装)を実行しているとき、この計算の出力はTensorとして返されます。だから、それをどんな種類の構造の中にも格納する必要はありません。 session.run(output, feed_dict)のような通信先ノード(output)を実行すると、検索できます。

これまで説明したように、RNNの最終状態を取り、それを後続の計算の初期状態として提供する必要があると思います。あなたがあなた自身のスタッフをuimplementingしている場合

cell = (some RNNCell implementation) 
initial_state = cell.zero_state(batch_size, tf.float32) 

B):二つの方法:

A)あなたは、モデルの構築時にはRNNCell実装を使用している場合は、このようなゼロ状態を構築することができますその後

initial_state = tf.zeros([batch_size, hidden_size]) 

、両方のケースでは、あなたのようなものがあります:ゼロテンソルとして状態を定義

をあなたが最初にあなたの状態を初期化してからfeed_dictinitial_stateとしてfinal_stateを提供することができ、あなたの実行ループで
output, final_state = rnn(input, initial_state) 

state = session.run(initial_state) 
for step in range(epochs): 

    feed_dict = {initial_state: state} 
    _, state = session.run((train_op,final_state), feed_dict) 

あなたが実際にあなたのfeed_dictはRNNの実装に依存して構築する方法。 BasicLSTMCellについては

は、例えば、状態はLSTMStateオブジェクトであり、あなたがchの両方を提供する必要があります。

feed_dict = {initial_state.c=state.c, initial_state.h: state.h}