如果我很好理解,RNN可以考虑序列中的最后一个值来预测下一个值。假设我要预测函数cos(x)的下一个值,并且我有一个数据集,其中x的结果在range(0,1000)中。首先,我用cos(0)填充模型以预测cos(1),然后用cos(1)预测cos(2)等。然后在每一步调整权重,模型将最后的值存储到做下一个预测。

就我而言,我想训练一个模型来预测视频的质量。为此,我有一个带有视频注释的数据集。对于每个视频,对于每个帧,我都会计算出36个与空间无关的特征。因此,输入的形状为(nb_videos,nb_frames,36)。对于每个视频,我都有一个代表整体视频质量的分数,标签的形状为(nb_videos,1)。

我不知道我可以使用哪种NN。我认为n_frames x 36太大了,对于一个简单的多层感知器而言。特征可能沿时间轴有意义,但沿特征轴却没有意义,因此,除非我训练带有1D卷积的36个模型,否则CNN毫无用处。最后,特征出现在一个序列中,但是RNN的问题在于它需要为序列中的每个元素评分,并且该模型仅能特别预测该序列中的下一个值。

我的想法是让1个RNN模型针对任何视频进行训练。我以良好的顺序为RNN的n_frame次提供了36个特征,并且只有在这些n_frame次迭代之后,模型才给出预测。然后,使用此预测来调整权重。然后,我们用数据集中随机选取的视频进行拍摄的时期数。

是否有意义?

是否存在类似的东西?

最佳答案

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

machine-learning - 非常规使用RNN/LSTM-LMLPHP
资料来源: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非常常见,您不会对它们进行非常规的使用。

关于machine-learning - 非常规使用RNN/LSTM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51166051/

10-12 21:09