我想在将训练集传递给我的NN之前对其进行归一化,所以我尝试keras.utils.normalize()
而不是手动进行(减去均值并除以std),我对获得的结果感到惊讶。
运行此:
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
而不是我应该手动完成的操作?
答案 0 :(得分:3)
这不是您期望的那种标准化。实际上,it在后台使用np.linalg.norm()
来使用Lp范数归一化给定数据:
./***/***/
例如,在默认情况下,它将使用L2归一化对数据进行归一化(即元素平方的总和等于1)。
您可以使用此功能,或者如果您不想手动进行均值和标准差归一化,则可以使用sklearn中的StandardScaler()
甚至是MinMaxScaler()
。