首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >conv_lstm.py示例使用“binary_crossentropy”损失进行回归。为什么不改用“mean_squared_error”呢?

conv_lstm.py示例使用“binary_crossentropy”损失进行回归。为什么不改用“mean_squared_error”呢?
EN

Stack Overflow用户
提问于 2018-07-21 06:35:00
回答 1查看 214关注 0票数 1

2个问题:

  1. 我使用 example on github来预测在该示例中创建的下一帧视频。这显然是一个回归问题,因为我们要预测下一个框架。我在想他们为什么要用这个损失 第38行:seq.compile(损耗=‘二元交叉熵’,优化器=‘adadelta’) 相反,我相信使用: Seq.compile(损失=‘均方_误差’,优化器=‘rmsprop’)

将导致更好的预测,因为我们正在实施一个回归问题,而不是分类。我说的对吗?

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

给它提供前7个位置,然后预测新的位置。

下面是他们用来预测7个输入帧的7个帧的代码:

代码语言:javascript
复制
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帧来填充模型,那么它会对预测产生影响吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-21 09:12:54

嗯,如果输出在0到1之间,使用‘二进制_交叉熵’是完全可以的。

就好像您在一个类中遇到了分类问题:真或错。(不过,函数仍然是连续的,到最后,零误差点将是相同的)

根据所使用的激活函数的类型(特别是使用'sigmoid'),由于数学细节,“binary_crossentropy”会给您带来比'mse‘更快的结果。

LSTM层递归地从分析帧(或任何类型数据的步骤)中学习。

它有所谓的“内在状态”。它分析的每一步都会更新这种内部状态,因此它的工作方式既像“记忆”直到现在发生的事情,也像某种定位器,比如“电影中的我现在在哪里?”

因此,对于LSTM来说,对前面的步骤进行预测是绝对必要的。

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

现在从一开始就看所有的电影,然后到达那个部分。你的理解会有所不同吗?LSTM会同意你的意见的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51453506

复制
相关文章

相似问题

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