我一直在学习使用神经网络进行关键点检测的一些教程。我注意到,对于输入(图像),除以255(标准化为[0,1],因为值落在0到255之间)非常常见。但对于目标(X / Y)坐标,我注意到标准化为[-1,1]更为常见。这种差异的任何原因。
X = np.vstack(df['Image'].values) / 255. # scale pixel values to [0, 1]
y = (y - 48) / 48 # scale target coordinates to [-1, 1]
答案 0 :(得分:1)
我认为神经网络图像归一化最常见的是去除图像的平均值并除以其标准偏差
X = (X - mean_dataset) / std_dataset
我认为关键点检测问题不应该太大。
看到性能上的差异可能会很有趣。我的猜测是,与[0,1]归一化相比,去除均值并除以std([-1,1])会更快收敛。
因为模型中的偏差较小,因此如果初始化为0,则需要较少的时间。
答案 1 :(得分:1)
据我所知,从技术上讲,你如何规范价值观应该没有多大差别。
但这些事情在ML技术中很重要。
将像素范围从(0到255)归一化到(0到1)使得收敛速度更快。在这里你可以做-1到1之间的范围。我在很多问题上都使用过这个范围。而且没有这样的问题。
但是对于输出来说这有点棘手。由于您使用的激活功能,使用范围0到1不是更好的主意。 ReLU是max(0,x),当你提供负值时它也会更好。这是relu的重点。此外,tanh范围的值介于-1和1之间。您唯一的选择是使用sigmoid函数,与relu和tanh函数相比,它的性能不佳。 sigmoid的问题是消失的梯度,并且它不是居中的,它为权重提供了稍微锯齿形的梯度更新。你可以找here。