- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我建立了一个 CNN,现在我正在尝试让我的网络训练有效地工作,尽管我缺乏有关该主题的正规教育。我决定使用随机梯度下降和标准均方误差成本函数。正如标题所述,问题似乎出在成本函数上。当我使用几个训练示例时,我计算每个示例的均方误差,并获取平均值,并将其用作完整误差。有两个输出神经元,一个用于面部,一个用于非面部;哪个级别更高就是产生的级别。本质上,如果训练示例产生错误的分类,我会计算错误(所需值是产生的类的值)。
示例:
输入人脸图像--->>>面:500不脸:1000
因此,在这种情况下,网络会说该图像不是一张脸,而事实上它是一张脸。错误结果是:500 - 1000 = -500-500^2 = 250000 <<--错误(如果我做错了什么请纠正我)
正如您所看到的,所需的值被设置为所选的不正确类的值。
现在一切都很好(据我所知),但这是我的问题:
当我在网络上多次执行 b-prop 时,整个训练集的平均成本降至 0,但这只是因为网络中的所有权重都变为 0,因此所有类别始终变为 0。
训练后:
输入不是脸->脸:0没有脸:0
--注意如果类相同,则选择第一个
(0-0)^0 = 0 <<--错误
所以误差被最小化到 0(我猜这很好),但显然不是我们想要的方式。
所以我的问题是这样的:当类错误时,如何最小化类之间的空间,同时又让它超越不正确的类,以便生成正确的类。
//例子有这个:(用于面部输入)脸:100不脸:200
得到这个:脸:0注释:0
想要这个:(或类似的东西)面:300不脸:100
我希望这个问题不是太模糊......但任何帮助将不胜感激!!!
最佳答案
您计算误差的方式与标准“均方误差”不符。但是,即使您要修复它,使用专为分类问题设计的不同类型的输出和错误也更有意义。
一种选择是使用带有 sigmoid 的单个输出单元激活函数。该神经元将输出输入图像是人脸的概率。不是人脸的概率由 1 减去该值得出。这种方法适用于二元分类问题。 Softmax输出是另一种选择。您将有两个输出单元:第一个输出输入图像是人脸的概率,第二个输出它不是人脸的概率。这种方法也适用于多类问题,每个类都有一个输出单元。
无论哪种情况,请使用 cross entropy loss (也称为对数损失)。在这里,您有一个目标值(面部或无面部),它是输入图像的真实类别。误差是网络分配给目标的负对数概率。
大多数执行分类的神经网络都以这种方式工作。你可以找到很多很好的教程here ,并阅读this online book .
关于math - 卷积神经网络的成本函数没有达到预期目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215355/
我是一名优秀的程序员,十分优秀!