我试图用张量流中的堆叠RNN来解决回归问题。应将RNN输出馈入完全连接的层以进行最终预测。目前,我正在研究如何将RNN输出馈送到最终的完全连接层。 我的输入形状[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,因此导致巨大的矩阵,非常长的训练时间和巨大的内存消耗。
我还发现很多文章建议再次拆分输入和堆叠输出,由于形状不匹配,我无法开始工作。
将RNN输出馈送到full_connected层的正确方法是什么?或者我应该使用RNN状态而不是输出?
编辑: 澄清:我确实需要这些长序列,因为我试图建模物理系统。输入是一个单一的功能,由白噪声组成。我有多个输出(在这个特定的系统45中)。脉冲效应系统状态为约10,000个时间步长。
即。目前,我正试图模拟由摇床制作的汽车齿轮桥接。输出由15个加速度传感器测量到3个方向(X,Y和Z)。
批量大小500是任意选择的。
尽管长序列可能消失了梯度或潜在的内存问题,但我对如何正确提供数据感兴趣。我们有适当的硬件(即Nvidia Titan V)。此外,我们已经能够通过经典DNN对系统行为进行建模,其时滞步长> 3000,准确度高。
答案 0 :(得分:0)
我相信任何标准都有10000个时间步长。 这会导致或将导致一些问题:
在其他解决方案中,您可以: