首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >馈电叠加RNN输出到全连接层

馈电叠加RNN输出到全连接层
EN

Stack Overflow用户
提问于 2018-04-13 06:56:11
回答 1查看 786关注 0票数 1

我试图用tensorflow中的堆叠RNN来解决回归问题。RNN输出应该输入到一个完全连接的层中进行最终的预测。目前,我正在纠结于如何将RNN输出输入到最终的fully_connected层。我的输入是形状为batch_size,max_sequence_length,num_features

RNN层的创建方式如下:

代码语言:javascript
复制
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 --我只使用最后一步的输出,如下所示:

代码语言:javascript
复制
final_outputs = tf.contrib.layers.fully_connected(
   outputs[:,-1,:],
   n_targets,
   activation_fn=None)

我还找到了一些例子和书籍,建议对输出和目标进行如下调整:

代码语言:javascript
复制
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次以上的时间步长具有良好的精度。

EN

回答 1

Stack Overflow用户

发布于 2018-04-13 09:52:10

我相信以任何标准来衡量,10000步的时间是非常长的。这导致或将引起以下几个问题:

  • 内存问题,正如您所观察到的:反向传播梯度需要存储所有的状态。
  • 训练表现:即使是门控单位,坡度也可能不会达到第一次台阶。
  • 预测性能:假设网络经过适当的训练,第一次观测不太可能对最终状态值产生任何影响,因此采取10000次时间步骤是浪费时间。

除其他解决方案外,您还可以:

  • 通过(可能重叠)较小大小的块来处理序列,并训练模型对每个块进行预测,然后聚合预测或进行一些中间融合,这将更难实现,特别是具有可变长度的序列持续时间。
  • 聚合和/或子样本输入或使用任何其他技巧来减少表观持续时间,如果您害怕失去精细的时间模式,则可能在过采样之前使用时间卷积。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49811006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档