【问题标题】:conv_lstm.py example uses 'binary_crossentropy' loss for regression. Why not using 'mean_squared_error' instead?conv_lstm.py 示例使用 'binary_crossentropy' 损失进行回归。为什么不使用“mean_squared_error”呢?
【发布时间】:2018-07-21 06:35:00
【问题描述】:

2 个问题:

  1. 我使用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')
    

会产生更好的预测,因为我们正在实现回归问题,而不是分类。 我说的对吗?

  1. 在代码的第 107 行,他们留下了一条评论说:

输入前 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 帧,它会对预测产生影响吗?

谢谢。

【问题讨论】:

  • 第 1 部分是基于意见的,除非您是实际的开发人员。第 2 部分:尝试一下。这里没有太多关于 SO 的话题。

标签: python keras conv-neural-network lstm


【解决方案1】:

好吧,如果输出在 0 和 1 之间的范围内,则完全可以使用“binary_crossentropy”。

就好像你在一个类别中遇到了分类问题:真或假。 (但函数仍然是连续的,最终零误差点是相同的)

根据使用的激活函数的类型(尤其是“sigmoid”),由于数学细节,“binary_crossentropy”会比“mse”更快地为您带来结果。


LSTM 层通过反复分析帧(或任何类型数据的步骤)来学习。

它具有所谓的“内在状态”。它分析的每一步都会更新这种内部状态,因此它既可以“记忆”直到此时发生的事情,也可以作为某种定位器,例如“我现在在电影中的哪个位置?”

因此,预测前面的步骤对于 LSTM 给出良好预测是绝对必要的。

想象一下你以前从未看过《星球大战》,然后你开始在 达特说:“卢克,我是你的父亲”。你只会说:“什么?”。

现在从头开始观看所有电影并到达那部分。你的理解会不一样吗? LSTM 会同意你的观点。

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 2017-08-10
    • 2018-06-24
    • 2021-06-17
    • 2018-01-26
    • 2020-10-31
    • 2016-10-01
    • 2020-03-24
    • 1970-01-01
    相关资源
    最近更新 更多