2个问题:
我使用keras team conv_lstm.py example on github来预测在该示例中创建的视频的下一帧。显然,这是一个回归问题,因为我们将预测下一帧。我想知道他们为什么要使用这种损失
line 38:
seq.compile(loss='binary_crossentropy', optimizer='adadelta')
相反,我相信使用:
seq.compile(loss='mean_squared_error', optimizer='rmsprop')
将产生更好的预测,因为我们正在实现回归问题,而不是分类问题。 我说得对吗?
用前7个位置喂食它,然后预测新的位置。
这是他们在给定7个输入帧的情况下用来预测7个帧的代码:
which = 1004
track = noisy_movies[which][:7, ::, ::, ::]
for j in range(16):
new_pos = seq.predict(track[np.newaxis, ::, ::, ::, ::])
new = new_pos[::, -1, ::, ::, ::]
track = np.concatenate((track, new), axis=0)
假设我要预测测试视频的第7帧。 如果我不使用最后7帧来填充模型,而是只使用第7帧来填充模型,那么预测会有所不同吗?
谢谢。
答案 0 :(得分:0)
好吧,如果输出在0到1之间的范围内,则完全可以使用'binary_crossentropy'。
就好像您只在一个类别中遇到分类问题:对还是错。 (不过,该函数仍然是连续的,最后零误差点将是相同的)
根据所使用的激活函数的类型(尤其是“ sigmoid”),由于数学上的细节,“ binary_crossentropy”将使结果比“ mse”更快。
LSTM层经常从分析帧(或任何类型的数据的步骤)中学习。
它具有所谓的“内部状态”。它分析的每个步骤都会更新此内部状态,因此它既可以像是对到目前为止所发生事件的“记忆”,也可以像“我现在在电影中现在在哪里?”之类的定位器一样工作。
因此,对LSTM做出好的预测是绝对必要的。
想象一下,您以前从未看过《星球大战》,然后在 达特说:“卢克,我是你父亲”。您只会说:“什么?”。
现在从头开始观看所有电影,并到达该部分。您的理解会有所不同吗? LSTM将同意您的观点。