我试图解决一个回归问题,在tensorflow中有一个叠加的RNN。RNN输出应输入一个完全连通的层,以进行最终预测。目前我正在努力研究如何将RNN输出输入最终的完全连接层。 我的输入是形状[批次大小,最大序列长度,数量特征]
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)
输出为[批次大小、最大序列长度、数量单位] 我尝试只使用最后一个时间步的输出,如下所示:
^{pr2}$我还发现了一些例子和书籍,建议像这样重塑输出和目标:
rnn_outputs = tf.reshape(outputs, [-1, num_rnn_units])
y_reshaped = tf.reshape(y, [-1])
由于我目前使用的批处理大小为500,序列长度为10000,这将导致巨大的矩阵、非常长的训练时间和巨大的内存消耗。在
我还发现了许多文章,建议取消堆叠输入和堆叠输出,因为形状不匹配,我无法开始工作。在
将RNN输出输入完全连接层的正确方法是什么?或者我应该使用RNN状态而不是输出?在
编辑: 澄清一下:我确实需要这些长序列,因为我正在尝试建立一个物理系统的模型。输入是由白噪声组成的单一特征。我有多个输出(在这个特定的系统45)。脉冲影响系统状态约10000个时间步。在
也就是说,目前我正在尝试建立一个汽车齿轮桥模型,它是由一个震动器动画。输出由15个加速度传感器在3个方向(X、Y和Z)进行测量。在
批量大小为500是任意挑选的。在
不管梯度消失或是长序列的潜在内存问题,我对如何正确地输入数据感兴趣。我们确实有合适的硬件(即Nvidia Titan V)。此外,我们已经能够用典型的DNN建模系统行为,其滞后时间超过3000个时间步,且精度较高。在
我相信以任何标准来衡量,一万个时间步都是很长的。 这将导致或将导致几个问题:
在其他解决方案中,您可以:
相关问题 更多 >
编程相关推荐