我试图用tensorflow中的堆叠RNN来解决回归问题。RNN输出应该输入到一个完全连接的层中进行最终的预测。目前,我正在纠结于如何将RNN输出输入到最终的fully_connected层。我的输入是形状为batch_size,max_sequence_length,num_features
RNN层的创建方式如下:
cells = []
for i in range(num_rnn_layers):
cell = tf.contrib.rnn.LSTMCell(num_rnn_units)
cells.append(cell)
multi_rnn_cell = tf.contrib.rnn.MultiRNNCell(cells)
outputs, states = tf.nn.dynamic_rnn(cell=multi_rnn_cell,
inputs=Bx_rnn,dtype=tf.float32)输出的形状为batch_size、max_sequence_length、num_rnn_units --我只使用最后一步的输出,如下所示:
final_outputs = tf.contrib.layers.fully_connected(
outputs[:,-1,:],
n_targets,
activation_fn=None)我还找到了一些例子和书籍,建议对输出和目标进行如下调整:
rnn_outputs = tf.reshape(outputs, [-1, num_rnn_units])
y_reshaped = tf.reshape(y, [-1])由于我目前使用的批处理大小为500个,序列长度为10000,这将导致巨大的矩阵,非常长的训练时间和巨大的内存消耗。
我还发现很多文章建议重新打开输入和叠加输出,但由于形状不匹配而无法工作。
向fully_connected层提供RNN输出的正确方法是什么?还是应该对输出使用RNN状态?
编辑:为了澄清:我确实需要这些长序列,因为我试图建立一个物理系统的模型。输入是一个单一的特征,包含一个白噪声。我有多个输出(在这个特定的系统中45)。脉冲效应系统状态约为10.000次。
也就是说,目前我正在尝试建模一个汽车齿轮桥接,这是由一个摇动器动画。用15个加速度传感器测量三个方向(X,Y& Z)的输出。
批量大小为500是任意挑选的。
不管长序列可能会消失渐变或潜在的内存问题,我都会对如何正确地输入数据感兴趣。我们确实有合适的硬件(即Nvidia Titan V)。此外,我们已经能够用经典的DNN对系统行为进行建模,滞后于3000次以上的时间步长具有良好的精度。
发布于 2018-04-13 09:52:10
我相信以任何标准来衡量,10000步的时间是非常长的。这导致或将引起以下几个问题:
除其他解决方案外,您还可以:
https://stackoverflow.com/questions/49811006
复制相似问题