【发布时间】:2017-09-04 16:02:57
【问题描述】:
我知道LSTM Followed by Mean Pooling 有一个类似的主题,但那是关于 Keras 的,我在纯 TensorFlow 中工作。
我有一个 LSTM 网络,其中循环由以下人员处理:
outputs, final_state = tf.nn.dynamic_rnn(cell,
embed,
sequence_length=seq_lengths,
initial_state=initial_state)
我为每个样本传递正确的序列长度(用零填充)。在任何情况下,输出都包含不相关的输出,因为根据序列长度,某些样本会产生比其他样本更长的输出。
现在我正在通过以下方法提取最后一个相关输出:
def extract_axis_1(data, ind):
"""
Get specified elements along the first axis of tensor.
:param data: Tensorflow tensor that will be subsetted.
:param ind: Indices to take (one for each element along axis 0 of data).
:return: Subsetted tensor.
"""
batch_range = tf.range(tf.shape(data)[0])
indices = tf.stack([batch_range, ind], axis=1)
res = tf.reduce_mean(tf.gather_nd(data, indices), axis=0)
我将sequence_length - 1 作为索引传递。关于最后一个主题,我想选择所有相关输出,然后选择平均池,而不是只选择最后一个。
现在,我尝试将嵌套列表作为索引传递给 extract_axis_1,但 tf.stack 不接受。
有什么解决方法吗?
【问题讨论】:
-
“相关输出”是什么意思?通常,您训练网络也预测“STOP”符号:您的实际输出是“GO”符号和“STOP”符号之间的内容。 “相关输出”过滤后你打算做什么?
-
我的意思是可能有 100 个输出(展开单元的数量),但输入序列的大小仅为 10。我想要对应于这 10 个输入/单元的输出。在获得这些之后,我想对它们进行平均,然后预测一个二元类(带有一个简单的全连接层)。现在我正在尝试使用唯一的最后一个相关输出,但事实证明这很难。
标签: tensorflow lstm pooling rnn