"dynamic_rnn"を使用してモデルを作成しています。動的 "zero_state"(推論で失敗する)を使用してdynamic_rnnを作成する方法
モデルがそのように私はこれを達成するために以下のコードを設定している80時間の信号に基づいて、私は、各実行の前に「INITIAL_STATEを」ゼロにしたいされています
state = cell_L1.zero_state(self.BatchSize,Xinputs.dtype)
outputs, outState = rnn.dynamic_rnn(cell_L1,Xinputs,initial_state=state, dtype=tf.float32)
これがために素晴らしい作品トレーニングプロセス。問題は、推論に行くと、BatchSize = 1の場合、rnnの "状態"が新しいXinputsの形状と一致しないため、エラーが返されます。ですから、私は、入力バッチサイズに基づいて "self.BatchSize"をハードコードするのではなく、作成する必要があると考えました。私はいろいろなアプローチを試みましたが、どちらも働いていませんでした。バッチサイズに基づいて定数であるので、feed_dictを通して一塊の0を渡すのではないでしょう。
ここに私の試みのいくつかがあります。初期化子が実行時まで呼ばれないことがあります考えて、
state = tf.zeros([Xinputs.get_shape()[0], self.state_size], Xinputs.dtype, name="RnnInitializer")
.....
state = cell_L1.zero_state(Xinputs.get_shape()[0],Xinputs.dtype)
別のアプローチを、しかし:彼らはすべて、一般的に、入力サイズはグラフの構築時に不明であるため、失敗しますまだグラフのビルドに失敗しました:
init = lambda shape, dtype: np.zeros(*shape)
state = tf.get_variable("state", shape=[Xinputs.get_shape()[0], self.state_size],initializer=init)
は、この一定の初期状態を動的に作成するか、私はテンソルサービングコードでfeed_dictを通してそれをリセットする必要があります取得する方法はありますか?グラフ内でこれをtf.Variable.assignを使って1回だけ行う賢い方法がありますか?