我有一个由 N = 4000个样本 组成的数据集X ,每个样本都包含 d = 2个特征 (连续值),这些特征跨越 t = 10个时间步长 。在时间步骤11,我还具有每个样本的相应“标签”,它们也是连续值。
目前,我的数据集的形状为X:[4000,20],Y:[4000]。
给定d个功能的10个先前输入,我想使用TensorFlow训练LSTM来预测Y值(回归),但是我在TensorFlow中实现这一点很困难。
我目前遇到的主要问题是了解TensorFlow如何期望输入被格式化。我见过各种各样的例子,如本,但这些例子处理连续时间序列数据的一个大的字符串。我的数据是不同的样本,每个样本都是独立的时间序列。
该的文件tf.nn.dynamic_rnn中指出:
tf.nn.dynamic_rnn
inputs:RNN输入。如果是time_major == False(默认值),则它必须是shape:的张量[batch_size, max_time, ...],或此类元素的嵌套元组。
inputs
time_major == False
[batch_size, max_time, ...]
在您的情况下,这意味着输入的形状应为[batch_size, 10, 2]。无需一次训练所有4000个序列,而是batch_size在每次训练迭代中仅使用其中的许多序列。类似于以下内容的东西应该起作用(为清楚起见,添加了重新塑形):
[batch_size, 10, 2]
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]。您可以据此预测最终值(每个序列一个):
outputs
[batch_size, 10, 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和的数字256state由cell.output_size和决定。cell.state_size。在创建LSTMCell上述内容时,它们是相同的。另请参阅LSTMCell文档。
cell.output_size
cell.state_size
LSTMCell