2017-12-11 3 views
1
  • ジュリア0.6.0
  • TensorFlow.jl 0.7.5
  • tensorflow(パイソン)1.4.1
  • OS:Ubuntuの16.04

私は時系列予測のためのLSTMを設定する。私は最後のタイムステップだけでなく、損失を計算したいので、すべてのタイムステップの出力が必要です。 documentation of tensorflow (Python API)によれば、dynamic_rnnの出力は、形状[batch_size, max_time, cell.output_size]time_major == Falseの場合)でなければなりません。 PythonでTensorFlow.jl出力形状

、これは正常に動作します:

import tensorflow as tf 
import numpy as np 

batch_size = 3 
series_length = 10 
hidden_size = 7 
number_of_features = 2 

session = tf.Session() 
x = tf.placeholder(tf.float32, [None, series_length, number_of_features]) 

cell = tf.contrib.rnn.BasicLSTMCell(hidden_size) 
outputs, state = tf.nn.dynamic_rnn(cell, x, dtype=tf.float32) 

session.run(tf.global_variables_initializer()) 

o = session.run(outputs, feed_dict={x: np.random.randn(batch_size, series_length, number_of_features)}) 

outputs[batch_size, series_length, hidden_size]と一致する形状[3, 10, 7]を、持っています。

ここで、密なレイヤーを使用して、各タイムステップで単一の値yを出力できます。

outputsはに対応する形状[3, 7]を持っています。これは最後のタイムステップにすぎないようです。

using TensorFlow 
tf = TensorFlow 

batch_size = 3 
series_length = 10 
number_of_features = 2 
hidden_size = 7 

session = tf.Session() 
x = tf.placeholder(Float32, shape=[-1, series_length, number_of_features]) 

cell = tf.nn.rnn_cell.LSTMCell(hidden_size) 
outputs, state = tf.nn.dynamic_rnn(cell, x) 

run(session, global_variables_initializer()) 

o = run(session, [outputs], Dict(x=>rand(Float32, batch_size, series_length, number_of_features))) 

これは意図的に、バグなのか、ポイントがないのか誰かが理解していますか?

答えて

1

あなたは正しいですか? TensorFlow.jlのdynamic_rnnは、Python TensorFlowのdynamic_rnnとは異なり、 は最後のステップの最後に出力と状態のみを返します。

これは、TensorFlow.jlが実行時に動的にサイズのテンソルを作成するための大きなサポートを持っていないためです。 方法はありますが、現在はこのために採用されていません。 私は現在、私たちが持っていないTensorArrays、 を使用していると思います。

簡単な解決策は、dynamic_rnnを使用しないことです。

TensorFlow.jlスタティックRNNすなわちTensorFlow.nn.rnnは、基本的に同じインターフェイスを持ちますが、すべてのタイムステップで出力を返します。

私はこれをissuesに書き留めました。