2017-12-11 1 views
1
  • 줄리아 0.6.0
  • TensorFlow.jl 0.7.5
  • tensorflow (파이썬) 1.4.1
  • OS : 우분투 16.04

내가 시계열 예측을위한 LSTM 설정 마지막 타임 스텝뿐만 아니라 손실을 계산할 때마다 모든 타임 스텝마다 출력이 필요합니다. documentation of tensorflow (Python API)에 따르면 dynamic_rnn의 출력은 [batch_size, max_time, cell.output_size] (time_major == False 인 경우) 모양이어야합니다. 파이썬에서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를 출력 할 수 있습니다.

TensorFlow.jl을 사용할 때 [batch_size, hidden_size]에 해당하는 [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에 기록했다.