【问题标题】:Unconvential use of a RNN/LSTM非常规使用 RNN/LSTM
【发布时间】:2018-07-04 04:59:46
【问题描述】:

如果我很好理解 RNN 允许考虑序列中的最后一个值来预测下一个值。假设我想预测函数 cos(x) 的下一个值,并且我有一个数据集,其中 x 的结果在 range(0, 1000) 内。首先,我向模型提供 cos(0) 以预测 cos(1),然后为模型提供 cos(1) 以预测 cos(2) 等。在每一步调整权重,模型保留最后一个值的记忆做出下一个预测。

就我而言我想训练一个模型来预测视频的质量。为此,我有一个带有视频注释的数据集。对于每个视频,对于每一帧,我计算了一组 36 个在空间上不相关的特征。所以输入的形状是 (nb_videos, nb_frames, 36)。对于每个视频,我都有一个代表全球视频质量的分数,标签的形状是 (nb_videos, 1)。

我不知道我可以使用哪种神经网络。我认为 n_frames x 36 对于一个简单的多层感知器来说太大了。特征可能在时间轴上有意义,但在特征轴上没有意义,所以除非我用一维卷积训练 36 个模型,否则 CNN 是没用的。最后,特征出现在一个序列中,但 RNN 的问题是它需要为序列的每个元素打分,并且该模型仅适用于预测该序列中的下一个值。

我的想法是拥有 1 个针对任何视频进行训练的 RNN 模型。我以良好的顺序将 36 个特征提供给 RNN n_frames 次,并且只有在这些 n_frames 迭代之后,模型才会给出预测。然后这个预测被用来调整权重。然后我们在数据集中随机选择视频的 epoch 数。

有意义吗?

是否存在类似的东西?

【问题讨论】:

    标签: machine-learning keras recurrent-neural-network


    【解决方案1】:

    我不认为你在非常规地使用 RNN/LSTM,你的想法是有道理的。如果我理解正确,您的想法涉及使用多对一 RNN:

    来源:http://karpathy.github.io/2015/05/21/rnn-effectiveness/

    每个时间步的输入对应于具有 36 个特征的一帧,最后一个时间步的输出传达有关整个视频的信息。在 Keras 中,这可能是这样的:

    from keras.models import Sequential
    from keras.layers import LSTM, Dense
    
    nb_frames = 10
    
    model = Sequential()
    model.add(LSTM(20, input_shape=(nb_frames, 36)))
    model.add(Dense(1, activation='relu'))
    model.compile('rmsprop', 'mse')
    model.summary()
    

    多对一 RNN 非常常见,您不会非常规地使用它们。

    【讨论】:

    • 非常感谢,这正是我想要的。存储在 2 个视频之间的单元格中的值会发生什么变化?
    • 不客气。我想我不明白你的问题。您是在谈论 LSTM 的隐藏状态(上图中的绿色框)吗?
    • 是的,我说的是每一层的内存。我想在一个批次中,在每一步中,隐藏状态取决于上一步,所以在我的情况下是前一帧。但是在两个视频之间?下一个视频/批次的第一帧/步骤的隐藏状态取决于上一个视频/批次的最后一帧/步骤的隐藏状态,还是在每个视频/批次时重置?
    • 不同视频的隐藏状态是独立的(Keras 中的默认行为),除非您将参数 stateful 设置为 True(参见 keras.io/layers/recurrent/#lstm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2018-06-15
    • 2016-11-21
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多