如何使用完整LSTM序列的输出?tensorflow

Ars*_*tic 3 python machine-learning deep-learning tensorflow

我可能在这里错了但是在这里.我正在使用这篇文章中的代码.

特别是代码

    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']
Run Code Online (Sandbox Code Playgroud)

上面的代码使用多对一预测方案.

在此输入图像描述

我想知道我是否可以使用这个代码的多对多方案.并使用所有LSTM单元的输出来预测该类.我试过替换最后一行

return tf.matmul(outputs, _weights['out']) + _biases['out']
Run Code Online (Sandbox Code Playgroud)

但后来我收到了一个错误

  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
Run Code Online (Sandbox Code Playgroud)

背景信息(非重要)

感谢您的输入.我不确定自己这种方法是否会产生更好的结果.

我试图复制本文 特别是本文活动识别.

他们所做的是用单帧训练CNN来预测帧属于哪个类,然后使用其密集层特征来训练LSTM,从而理解单帧之间的时间关系并提高识别准确度.

我已经使用CNN复制了结果,并获得了61%的单帧精度(表1: - RGB单帧)精度.

我从这个网络中提取了(fc-6)特征,并将其作为LSTM的输入,但不是将精度提高到~71.2%,而是降低了51%的LSTM精度.不知道为什么会这样.(可能他们使用的LSTM模型不同是我的猜测)

对此的任何想法也都很受欢迎.

Ish*_*ael 5

要获取所有输出的列表,您可以执行以下操作:

return [tf.matmul(output, _weights['out']) + _biases['out'] for output in outputs]
Run Code Online (Sandbox Code Playgroud)

这将返回一个TensorFlow张量的python数组,每个输出一个.

如果您想要一个连接所有输出的张量,请将此数组传递给tf.concat:

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

请注意,我在这里使用concat_dim=0.如果你每批处理多个输入(我猜这对于RNN来说不太常见?),那么你的第0个维度就是样本ID,你需要使用它concat_dim=1.