我试图训练多输出模型。我按如下方式批量加载图像,
def get_batch_features(self, idx):
return np.array([load_image(im) for im in self.im_list[idx * self.bsz: (1 + idx) * self.bsz]])
以下是我的load_image函数,其中 im 将图像规范化到 0 到 255 之间,如下所示
def load_image(im):
return img_to_array(load_img(im, target_size=(224, 224))) / 255.
我正在加载标签,这些标签是 4 个 xy 坐标的目标坐标。
def get_batch_labels(self, idx):
return self.labels[idx * self.bsz: (idx + 1) * self.bsz,:]
如何通过将目标坐标缩放到 [-1, 1] 来规范目标坐标? 由于 im 不缩放它,IM 会因为模型过度拟合而获得巨大的验证损失。有什么方法可以在 [-1,1] 之间缩放目标坐标吗?
假设您的目标坐标在区间[0,223]
的某个地方,因为这是您的图像有多少像素,那么通过减去111.5
并在之后除以111.5
来将其调整为[-111.5,111.5]
怎么样?
return (self.labels[idx * self.bsz: (idx + 1) * self.bsz,:]-111.5)/111.5
实际上,根据我的经验,您不需要精确地击中[-1,1]
,只需将它们除以100
就足够了,以便它们处于正确的数量级。除此之外,您还可以计算所有标签的统计数据并对其进行归一化,以便它们遵循零均值/单位方差,这是一种常见的策略。