前提・実現したいこと
tensorflowのLSTMを用いてリアルタイムでフィルタ処理を行いたいのですがうまくできません。
具体的には以下のコードで中間層の情報をインスタンス変数として保存し、cell(x[:, t, :], self.state) によってLSTMの出力をサンプリング毎に取得できないかと考えました。しかしエラーは出ませんが def value()を実行するたびに self.stateが初期状態に戻されてしまっているようです。
該当のソースコード
python
1 def inference(x, n_batch, maxlen=None, n_hidden=None, n_out=None): 2 def weight_variable(shape, name=None): 3 initial = tf.truncated_normal(shape, stddev=0.01) 4 return tf.Variable(initial, name=name) 5 6 def bias_variable(shape, name=None): 7 initial = tf.zeros(shape, dtype=tf.float32) 8 return tf.Variable(initial, name=name) 9 #cell = tf.contrib.rnn.BasicRNNCell(n_hidden) 10 cell1 = tf.contrib.rnn.LSTMCell(n_hidden, use_peepholes=True, forget_bias=1.0) 11 cell2 = tf.contrib.rnn.LSTMCell(n_hidden, use_peepholes=True, forget_bias=1.0) 12 cell3 = tf.contrib.rnn.LSTMCell(n_hidden, use_peepholes=True, forget_bias=1.0) 13 cell = tf.contrib.rnn.MultiRNNCell([cell1, cell2, cell3]) 14 self.initial_state = cell.zero_state(n_batch, tf.float32) 15 16 V = weight_variable([n_hidden, n_out], name='W_out') 17 tf.summary.histogram('W_out', V) 18 c = bias_variable([n_out], name='b_out') 19 tf.summary.histogram('b_out', c) 20 if self.flag: 21 self.state = self.initial_state 22 self.flag = False 23 if self.maxlen != 1: 24 self.state = self.initial_state 25 26 outputs = [] # 過去の隠れ層の出力を保存 27 #with tf.variable_scope('LSTM'): 28 for t in range(maxlen):#学習時以外は maxlen = 1 29 #if t > 0: 30 #tf.get_variable_scope().reuse_variables() 31 (cell_output, self.state) = cell(x[:, t, :], self.state) 32 ######## 33 outputs.append(tf.matmul(cell_output, V) + c) 34 y = tf.concat(outputs,1) 35 y = tf.reshape(y,[n_batch,maxlen,2]) 36 return y 37 38 39 self.y = inference(self.x, self.n_batch, maxlen=self.maxlen, n_hidden=self.n_hidden, n_out=self.n_out) 40 41 42 def value(self, X, batch_size=1): 43 y_ = self.y.eval(session=self.sess, feed_dict={ 44 self.x: X, 45 self.n_batch: batch_size 46 }) 47 return y_
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー