2017-03-24 14 views
1

Estimatorへのmodel_fn入力としてLSTMモデルを実装しようとしています。私のXは時系列の価格を持つ唯一の.txtです。これは、その後に行くことになっているTensorflow 1.0 dynamic_rnnのLSTMセルでディメンションエラーが発生する

def lstm_cell(): 
    return tf.contrib.rnn.BasicLSTMCell(
    size, forget_bias=0.0, state_is_tuple=True) 
    attn_cell = lstm_cell 
    if is_training and keep_prob < 1: 
    def attn_cell(): 
    return tf.contrib.rnn.DropoutWrapper(
    lstm_cell(), output_keep_prob=keep_prob) 
    cell = tf.contrib.rnn.MultiRNNCell([attn_cell() for _ in range(num_layers)], state_is_tuple=True) 
    initial_state = cell.zero_state(batch_size, data_type()) 
    inputs = tf.unstack(X, num=num_steps, axis=0) 
    outputs = [] 
    outputs, state = tf.nn.dynamic_rnn(cell, inputs, 
          initial_state=initial_state) 

first_hidden_layer = tf.contrib.layers.relu(outputs, 1000) 

は残念ながら、それはとValueError「というidicatingエラーがスローされます:私の最初の隠れ層に入る前に、私はとしてLSTMセルを定義しよう寸法は1でなければならないが、入力形状[1]、[3]で '転置'(op: 'Transpose')の場合は3です。 私の問題は「インプット」テンソルであると分かります。その説明では、入力変数は[batch_size、max_time、...]という形式のテンソルであると仮定されていますが、これを上の構造にどのように変換するかは考えられていません。システムに供給される。だから私の質問は、dynamic_rnnクラスへの入力変数として使用できるテンソルを作成する方法です。

ありがとうございます。

答えて

1

私はあなたが行を必要としないと考えている:

inputs = tf.unstack(X, num=num_steps, axis=0) 

dynamic_rnnはテンソルのリストを取ることはありませんので、あなたがdynamic_rnnに直接Xを供給することができます。時間軸が次元0(time_major == Trueの場合)または次元1(time_major == Falseの場合)である場合、1テンソルが必要です。

Xは、実際には、inputsは1次元テンソルのリスト(エラーメッセージで示されている)であるため、2次元のみを持つようです。あなたが持つunstack行置き換える必要があります。これはdynamic_rnn

+0

それが動作することにより、必要とされる大きさ1の3番目の次元を追加します

inputs = tf.expand_dims(X, axis=2) 

をので、私は非常にあなたに義務づけられていますが、私はかなりありませんまだ理解している。 "inputs"変数は "[batch_size、time_steps、....]"の形式でなければならないと言います。しかし、私のXは、推定値に渡すときには数えきれないほどの配列に過ぎません。ですから、私の質問は、2番目のもので、どこから来て、どのような意味でこれと "tf.expand_dims()"コマンドが "[batch_size、time_steps、....]"というフォームを作成するのでしょうか? –

+0

私はあなたの質問に基づいて、あなたは価格の系列を持っていると思う(それは長さTであると言うことができます)。 dynamic_rnnは、一度に複数のシーケンスを扱うことができます。 "Batch"(サイズBと言うことができます)。 1つのシーケンスのみを供給する場合は、Bを1に設定します。入力は形状[B、T]でなければなりませんが、dynamic_rnnはもう1つの次元を必要とします(NLPのような他のタスクでは各単語がベクトルです)。我々はその余分な次元を持たなければならないが、一連の価格に対してそれを必要としないので、それを1に設定して、入力形状を[B、T、1]とする。 time_majorがTrueの場合、[T、B、1]にする必要があります。 expand_dimsはその余分なディメンションを追加します。 –

+0

私は最後の部分を理解していますが、私の問題はBを設定する方法を理解することです。私が言ったように、私は推定器に1次元のnumpy配列の時系列を供給します。私がシステムに言う唯一の時間は、initial_state変数を定義するときです。これはまた、予測が明らかにbatch_sizeを持ち、yが元のサイズを持つため、 –

関連する問題