2016-05-10 21 views
3

私はここで間違っているかもしれないが、ここに行く。 私はこのpostのコードを使用しています。完全なLSTMシーケンスの出力の使い方は?テンソルフロー

具体

outputs, states = rnn.rnn(lstm_cell, _X, initial_state=_istate) 

    # Linear activation 
    # Get inner loop last output 
    return tf.matmul(outputs[-1], _weights['out']) + _biases['out'] 

のコードが上記のコードは、1つの予測方式に多くを使用します。

enter image description here

私はこのコードで多くのスキームに多くを使用することができれば知っていただきたいと思います。 そして、すべてのLSTMユニットの出力を使用してクラスを予測します。 私は

return tf.matmul(outputs, _weights['out']) + _biases['out'] 

と最後の行を交換しようとしている。しかし、私は

File "/media/anilil/Data/charm/Cnn/train_lstm_ucf.py", line 165, in <module> 
    pred = RNN(x, istate, weights, biases,keep_prob) 
    File "/media/anilil/Data/charm/Cnn/train_lstm_ucf.py", line 163, in RNN 
    return tf.matmul(outputs, _weights['out']) + _biases['out'] 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 938, in matmul 
    a = ops.convert_to_tensor(a, name="a") 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 529, in convert_to_tensor 
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/constant_op.py", line 178, in _constant_tensor_conversion_function 
    return constant(v, dtype=dtype, name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/constant_op.py", line 161, in constant 
    tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape)) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_util.py", line 319, in make_tensor_proto 
    _AssertCompatible(values, dtype) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_util.py", line 256, in _AssertCompatible 
    raise TypeError("List of Tensors when single Tensor expected") 
TypeError: List of Tensors when single Tensor expected 

背景情報(非重要な)エラーあなたの入力のための

感謝を取得します。このアプローチがより良い結果をもたらすかどうかは私自身は分かりません。

私は複製しようとしていますthis paper 特にこの文書のactivity recognitionです。

CNNを1つのフレームでトレーニングして、そのフレームがどのクラスに属するかを予測し、その密なレイヤーの機能を使用してLSTMをトレーニングし、単一フレーム間の時間的関係を理解し​​、認識精度。

私はCNNで結果を再現し、61%の単一フレーム精度(表1:RGBシングルフレーム)の精度を得ました。

私はこのネットワークから(fc-6)フィーチャを抽出し、それをLSTMへの入力として与えましたが、71.2%の精度向上の代わりに、51%のLSTM精度が得られました。なぜこれが起こるかわからない。 (彼らが使用していたLSTMモデルは私の推測とは異なるかもしれません)

それについてのご意見もありがとうございます。

答えて

5

すべての出力のリストを取得するには、次の操作を実行できます。

return [tf.matmul(output, _weights['out']) + _biases['out'] for output in outputs] 

これはTensorFlowテンソルのPythonの配列、出力ごとに1を返します。

あなたはすべての出力を連結テンソルをしたい場合は代わりに、tf.concatにこの配列を渡す:ここで私はconcat_dim=0を使用

transformed_outputs = [tf.matmul(output, _weights['out']) + _biases['out'] for output in outputs] 
return tf.concat(concat_dim=0, values=transformed_outputs) 

注意を。バッチごとに複数の入力を処理する場合(RNNではあまり一般的ではありませんが)、0次次元はサンプルIDであり、concat_dim=1を使用する必要があります。

+0

非常にエレガントな答え!あなたはこれを試したことがありますか?すべての出力をクラス予測のために組み合わせましたか?私はこれが実際に一般的な予測パフォーマンスを向上させることができるのだろうかと思います。 –

+0

私は自分ではしませんでしたが、最後のステップからクラスを取得するのではなく、異なるタイムステップの結果を集約している人を知っています。 とにかく、OPケースでは、彼は実際にタイムステップごとに1つの出力を必要とする問題があると思うので、彼の最適化ではなく、むしろ要件です。 – Ishamael

1

outputsはテンソルではありません。

これは興味深い考えであり、出力をどのように組み合わせるかはあなた次第です。一つの簡単な方法があるかもしれない:

return tf.matmul(outputs[1], W[1]) + tf.matmul(outputs[2], W[2]) ... 

(リストの内包か何かを使用してください。)

私は、これは予測結果を改善することができますが、興味深いが見てわかりません。

関連する問題