【问题标题】:What is the purpose of keras utils normalize?keras utils normalize的目的是什么?
【发布时间】:2019-03-05 10:05:43
【问题描述】:

我想在将训练集传递给我的 NN 之前对其进行规范化,因此我尝试了 keras.utils.normalize(),而不是手动进行(减去均值并除以标准差),我对得到的结果感到惊讶。

运行这个:

r = np.random.rand(3000) * 1000
nr = normalize(r)
print(np.mean(r))
print(np.mean(nr))
print(np.std(r))
print(np.std(nr))
print(np.min(r))
print(np.min(nr))
print(np.max(r))
print(np.max(nr))

​ ​结果:

495.60440066771866
0.015737914577213984
291.4440194021
0.009254802974329002
0.20755517410064872
6.590913227674956e-06
999.7631481267636
0.03174747238214018

不幸的是,docs 没有解释幕后发生的事情。您能否解释一下它的作用以及我是否应该使用 keras.utils.normalize 而不是我手动完成的操作?

【问题讨论】:

    标签: python machine-learning neural-network keras


    【解决方案1】:

    这不是您期望的那种标准化。实际上,it 在后台使用 np.linalg.norm() 使用 Lp-norms 规范化给定数据:

    def normalize(x, axis=-1, order=2):
        """Normalizes a Numpy array.
        # Arguments
            x: Numpy array to normalize.
            axis: axis along which to normalize.
            order: Normalization order (e.g. 2 for L2 norm).
        # Returns
            A normalized copy of the array.
        """
        l2 = np.atleast_1d(np.linalg.norm(x, order, axis))
        l2[l2 == 0] = 1
        return x / np.expand_dims(l2, axis)
    

    例如,在默认情况下,它将使用 L2 归一化对数据进行归一化(即元素的平方和等于 1)。

    您可以使用此功能,或者如果您不想手动进行均值和标准标准化,您可以使用来自 sklearn 的 StandardScaler() 甚至是 MinMaxScaler()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 2018-04-28
      • 2016-11-06
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多