如何规范化4D阵列(不是图像)?

时间:2017-11-08 16:57:46

标签: python numpy neural-network deep-learning normalization

我有一个形状(1948, 60, 2, 3)的4D阵列,它告诉60个时间步长的末端效应器位置(x,y,z)的差异。 数字1948表示样本数量,60表示时间步数,2表示left_arm和right_arm,3表示x,y,z位置。

它的外观样本如下:

array([[[  3.93048840e-05,   7.70215296e-04,   1.13865805e-03],
        [  1.11679799e-04,  -7.04810066e-04,   1.83552688e-04]],

   [[ -6.26468389e-04,   6.86668923e-04,   1.57112482e-04],
    [  3.68164582e-04,   7.98948528e-04,   4.50642200e-04]],

   [[  2.51472961e-04,  -2.48105983e-04,   7.52486843e-04],
    [  8.99905240e-05,   1.70473461e-04,  -3.09927572e-04]],

   [[ -7.52414330e-04,   5.46782063e-04,  -3.76679264e-04],
    [ -3.12531026e-04,  -3.36585211e-04,   5.79075595e-05]],

   [[  7.69968002e-04,  -1.95524291e-03,  -8.65666619e-04],
    [  2.37583215e-04,   4.59415986e-04,   6.07292643e-04]],

   [[  1.41795261e-03,  -1.62364401e-03,  -8.99673829e-04],

我想将这些数据标准化,因为我需要在神经网络上下雨。我如何规范4D阵列我对图像有直觉。我可以规范化每个示例数据,还是应该对整个4D阵列进行归一化?

2 个答案:

答案 0 :(得分:0)

首先,是的,你可以做标准化,没有问题。

其次,4D阵列没什么特别之处。对于每个特征,应该单独执行标准化。因此,根据标准化的类型,您应该计算训练集中所有样本的每个要素的最大值和最小值(或平均值和标准值)。

在您的情况下,您应该决定数据的哪些部分引用相同的分布。因此,决定每个方面:

1)第一维只是样本数,因此不会进行新的分发。将其视为数据条目的数量。

2)时间步。在这里,您应该决定:x,y,z值是否在60个时间步长中具有唯一分布?如果不是,请按照与上一步相同的方式对待它。如果是,则为每个时间步骤分别计算后续特征的max,min(或mean,std)。 (为简单起见,想想步骤0中的arm实际上是否有类似于30,60的值?如果是,则它们都对应于数据条目,no:x60特征)

3)左臂和右臂是否有不同的x,y,z值?如果是,请再次单独计算。 (我猜他们这样做,因为左右手臂在统计上倾向于占据空间中的不同点)

4)x,y,z值绝对是独立分布,因此请单独计算。

现在,当您决定使用3到360之间的功能时(取决于您的决定),请为它们计算必要的值(max,min或mean,std)并执行标准例程。

希望它有所帮助!

答案 1 :(得分:0)

诀窍是使用keepdims设置为True,这可以让广播发生,而不会因为扩展暗淡的内务工作而烦扰我们。因此,处理通用维度数组的通用ndarray的解决方案是 -

# Get min, max value aming all elements for each column
x_min = np.min(x, axis=tuple(range(x.ndim-1)), keepdims=1)
x_max = np.max(x, axis=tuple(range(x.ndim-1)), keepdims=1)

# Normalize with those min, max values leveraging broadcasting
out = (x - x_min)/ (x_max - x_min)