我已经阅读了一些有关使用神经网络进行关键点检测的教程。我注意到,对于输入(图像),除以 255 是很常见的(归一化为 [0,1],因为值介于 0 和 255 之间)。但对于目标 (X/Y) 坐标,我注意到更常见的是标准化为 [-1,1]。造成这种差异的任何原因。
例子:http://danielnouri.org/notes/2014/12/17/using-volvingal-neural-nets-to-detect-facial-keypoints-tutorial/ http://danielnouri.org/notes/2014/12/17/using-convolutional-neural-nets-to-detect-facial-keypoints-tutorial/
X = np.vstack(df['Image'].values) / 255. # scale pixel values to [0, 1]
y = (y - 48) / 48 # scale target coordinates to [-1, 1]
根据我的说法,从技术上讲,标准化值的方式应该没有太大差异。
但这些事情在机器学习技术中很重要。
将像素范围从(0到255)归一化为(0到1)可以使收敛速度更快。在这里你也可以在 -1 和 1 之间进行选择。我在很多问题中都使用了这个范围。并且不存在这样的问题。
但对于输出来说,这有点棘手。由于您正在使用的激活函数,使用范围 0 到 1 并不是一个更好的主意。 ReLU 是 max(0, x),当您提供负值时效果更好。这就是 relu 的全部意义所在。 tanh 的值范围也介于 -1 和 1 之间。您唯一的选择是使用 sigmoid 函数,与 relu 和 tanh 函数相比,它的性能不太好。 sigmoid 的问题是梯度消失,并且它不是以零为中心的,这为权重提供了一些锯齿状的梯度更新。你可以找一下here http://cs231n.github.io/neural-networks-1/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)