需要按照特征值分别求取均值和方差,然后再做零均值和归一化方差处理。
原因在学习《吴恩达·深度学习》第二门课 1.9 归一化输入时,遇到一个问题。视频里说均值和都是一个向量。但我不是很理解到底是不是按照特征值分别求取,再分别放缩。
群里老兄点拨,假设对整个矩阵求均值和方差,再减去和除以,可能会导致原来比较小的值近似为0。不符合归一化输入处理的目的。因此需要按特征值分别求取。
视频笔记:
1.9 归一化输入(Normalizing inputs)http://www.ai-start.com/dl2017/html/lesson2-week1.html#header-n227http://www.ai-start.com/dl2017/html/lesson2-week1.html#header-n227
编码 import numpy as np# 对传入数据进行归一化处理# data的shape应该是(x,m),其中x是特征值的个数,m是样本数量def normalizing(data: np.ndarray): # m = 样本数量 m = data.shape[1] # 1.零均值:对每一个特征值分别求均值 u = (1 / m) * data.sum(axis=1, keepdims=True) cache = data - u # 2.归一化方差:注意,是先平方再求和,这是为了避免如[-1,0,1]数据造成求和为0,之后产生除以0 delta_double = (1 / m) * (cache ** 2).sum(axis=1, keepdims=True) cache = cache / delta_double return cacheif __name__ == '__main__': # 输入的数组 shape=(2,3) arr = np.array([[1, 2, 3], [4, 5, 6]]) print(normalizing(data=arr))