一尘不染

了解Tensorflow LSTM输入形状

python

我有一个由 N = 4000个样本 组成的数据集X ,每个样本都包含 d = 2个特征 (连续值),这些特征跨越 t =
10个时间步长
。在时间步骤11,我还具有每个样本的相应“标签”,它们也是连续值。

目前,我的数据集的形状为X:[4000,20],Y:[4000]。

给定d个功能的10个先前输入,我想使用TensorFlow训练LSTM来预测Y值(回归),但是我在TensorFlow中实现这一点很困难。

我目前遇到的主要问题是了解TensorFlow如何期望输入被格式化。我见过各种各样的例子,如,但这些例子处理连续时间序列数据的一个大的字符串。我的数据是不同的样本,每个样本都是独立的时间序列。


阅读 198

收藏
2021-01-20

共1个答案

一尘不染

的文件tf.nn.dynamic_rnn中指出:

inputs:RNN输入。如果是time_major == False(默认值),则它必须是shape:的张量[batch_size, max_time, ...],或此类元素的嵌套元组。

在您的情况下,这意味着输入的形状应为[batch_size, 10, 2]。无需一次训练所有4000个序列,而是batch_size在每次训练迭代中仅使用其中的许多序列。类似于以下内容的东西应该起作用(为清楚起见,添加了重新塑形):

batch_size = 32
# batch_size sequences of length 10 with 2 values for each timestep
input = get_batch(X, batch_size).reshape([batch_size, 10, 2])
# Create LSTM cell with state size 256. Could also use GRUCell, ...
# Note: state_is_tuple=False is deprecated;
# the option might be completely removed in the future
cell = tf.nn.rnn_cell.LSTMCell(256, state_is_tuple=True)
outputs, state = tf.nn.dynamic_rnn(cell,
                                   input,
                                   sequence_length=[10]*batch_size,
                                   dtype=tf.float32)

文档开始outputs将具有形状[batch_size, 10, 256],即每个时间步长一个256输出。state将是一个形状的元组[batch_size, 256]。您可以据此预测最终值(每个序列一个):

predictions = tf.contrib.layers.fully_connected(state.h,
                                                num_outputs=1,
                                                activation_fn=None)
loss = get_loss(get_batch(Y).reshape([batch_size, 1]), predictions)

形状为outputs和的数字256statecell.output_size和决定。cell.state_size。在创建LSTMCell上述内容时,它们是相同的。另请参阅LSTMCell文档

2021-01-20