美文网首页
深度学习中的Normalization和Standardizat

深度学习中的Normalization和Standardizat

作者: LabVIEW_Python | 来源:发表于2021-02-10 06:03 被阅读0次

    网上各种资料,对深度学习中的Normalization和Standardization概念都没有解释清楚,导致"标准化"和"归一化"这两个词长期被混用并被传播。本文重新梳理一遍。

    归一化(Normalization):归一化是一种简化计算的方式,即将有量纲的数据,经过变换,化为无量纲的数据,即纯量;归一化有同一、统一和合一的意思。在机器学习中,用于特征缩放(Feature scaling)把不同量纲,不同尺度的特征数据放缩到同一尺度,同一分布,并消除量纲,这样可以达到加速梯度下降法收敛,让损失函数的正则化效果更好,消除Internal Covariate Shift问题(BatchNormalization),保证训练效果的目的。

    实现机器学习领域中的特征放缩的归一化(Normalization)方法主要有4种:

    • min-max normalization (又称,Rescaling),这是最简单的特征缩放方法,将特征值缩放到[0,1]区间,对均值和方差不做要求,不改变原始数据的分布,公式为: min-max normalization
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    def plot(data, title):
        sns.set_style('dark')
        f, ax = plt.subplots()
        ax.set(ylabel='probability desity')
        ax.set(xlabel='height(blue) : weight(green)')
        ax.set(title=title)
        sns.distplot(data[:, 0:1], color='blue')
        sns.distplot(data[:, 1:2], color='red')
        plt.show()
    # 生成不同分布的身高体重数据
    np.random.seed(0)
    height = np.random.uniform(low=150, high=190, size=1000).reshape(-1, 1)
    weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)
    # 原始数据
    original_data = np.concatenate((height, weight), axis=1)
    plot(original_data, 'Original')
    # min-max normalization
    min_max_data = (original_data - np.min(original_data, axis=0)) / (
        np.max(original_data, axis=0) - np.min(original_data, axis=0))
    plot(min_max_data, 'min-max normalization')
    
    min-max normalization处理效果
    • Mean normalization,跟min-max normalization类似,只是原始数据减去最小值变为减去平均值。Mean normalization处理后,将特征值缩放到[-1,1]区间,均值变为=0(以零对称),方差不做要求,不改变原始数据的分布,公式为 Mean normalization
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    def plot(data, title):
        sns.set_style('dark')
        f, ax = plt.subplots()
        ax.set(ylabel='probability desity')
        ax.set(xlabel='height(blue) : weight(green)')
        ax.set(title=title)
        sns.distplot(data[:, 0:1], color='blue')
        sns.distplot(data[:, 1:2], color='red')
        plt.show()
    # 生成不同分布的身高体重数据
    np.random.seed(0)
    height = np.random.uniform(low=150, high=190, size=1000).reshape(-1, 1)
    weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)
    # 原始数据
    original_data = np.concatenate((height, weight), axis=1)
    plot(original_data, 'Original')
    # Mean normalization
    mean_normal_data = (original_data - np.mean(original_data, axis=0)) / (
        np.max(original_data, axis=0) - np.min(original_data, axis=0))
    plot(mean_normal_data, 'Mean normalization')
    
    Mean normalization处理结果

    下一节《深度学习中的Normalization和Standardization处理2》

    相关文章

      网友评论

          本文标题:深度学习中的Normalization和Standardizat

          本文链接:https://www.haomeiwen.com/subject/mnjqxltx.html