首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用完整LSTM序列的输出?tensorflow

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

Stack Overflow用户
提问于 2016-05-10 14:39:57
回答 2查看 3K关注 0票数 3

我可能弄错了,但我走了。我正在使用这个帖子中的代码。

中的代码

代码语言:javascript
复制
    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']

上面的代码使用了多到一个预测方案。

我想知道我是否可以用这个代码来使用多到多的方案。并利用所有LSTM单元的输出来预测该类。我试着把最后一行换成

代码语言:javascript
复制
return tf.matmul(outputs, _weights['out']) + _biases['out']

但是我得到了一个错误

代码语言:javascript
复制
  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

背景资料(非生命)

谢谢你的意见。我不确定这种方法是否会产生更好的效果。

我正在尝试复制本论文,特别是本文中的活动识别

他们所做的是用单个帧训练CNN,预测该帧属于哪一类,然后利用该帧的密集层特征来训练LSTM,从而理解单个帧之间的时间关系,提高识别精度。

我已经复制了与CNN的结果,并得到一个单一的帧精度(表1:- RGB单帧)的准确性为61%。

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

任何关于这方面的想法也很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-10 15:41:08

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

代码语言:javascript
复制
return [tf.matmul(output, _weights['out']) + _biases['out'] for output in outputs]

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

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

代码语言:javascript
复制
transformed_outputs = [tf.matmul(output, _weights['out']) + _biases['out'] for output in outputs]
return tf.concat(concat_dim=0, values=transformed_outputs)

请注意,这里使用的是concat_dim=0。如果每批处理多个输入(我猜RNN不那么常见),那么第0维度是样例ID,您需要使用concat_dim=1

票数 5
EN

Stack Overflow用户

发布于 2016-05-10 15:11:44

请注意,outputs是一个列表,而不是张量。

这是一个有趣的想法,这取决于你如何组合输出。一个简单的方法可能是:

代码语言:javascript
复制
return tf.matmul(outputs[1], W[1]) + tf.matmul(outputs[2], W[2]) ...

(使用列表理解之类的。)

我不确定这是否能提高预测结果,但有趣的是看看。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37141719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档