我正在建立一个cnn来分类灰度图像。网络确实在测试集上进行了直到97%的准确度训练才被卡住。 现在我发现我忘了在将数据输入网络之前将数据置零。在考虑在哪里最好地应用它时,我想出了不止一个答案,并想对它们有一些想法。
首先对我的架构进行一点概述: 我正在将数据集(训练,验证,测试)完全加载到RAM中。在运行期间,我将批量图像加载到占位符中,然后通过随机操纵亮度和对比度将其扭曲,然后将它们馈送到网络中。
现在,当我想应用零中心时,我可以取出训练数据集的平均值,然后从我输入网络的每张图片中减去它,或者我可以减去每张图片的平均值。使用tensorflow中的tf.image.per_image_standardization()方法。
但是,如果我计算训练图像的平均值,我会在随机扭曲图像之前或之后减去它吗? 而且如果我以后使用网络标记真实图像,我是否需要保存平均值并从我想要分类的每张图片中减去它?
同样适用于per_image_standardization,我是在扭曲图像之前还是之后应用它,我是否也将它应用于我想要在以后分类的真实世界数据?
答案 0 :(得分:0)
应在标准化/标准化之前应用扭曲。扭曲训练集的想法是模拟比实际拥有的数据更多的数据,因此您应该对扭曲的训练数据的测试示例做一切。这意味着如果您希望稍后对测试图像使用数据集范围的规范化,则保存数据集统计信息。
是基于每个图像单独进行标准化还是作为整个数据集进行标准化取决于数据。如果图像之间的光照变化很大并不重要 - 例如,对于在不同照度下拍摄照片的车辆的分类问题 - 我会对每张图像进行标准化。如果您正在寻找依赖于照明水平的东西 - 例如白天/夜晚,室内/室外分类 - 我将其作为整个数据集。