我正在通过the MNIST tensorflow tutorial并想知道如何对数据集进行预处理。特别是,我认为图像通常具有整数值来表示像素的强度。例如,我想的范围是0到255。但是,当我检查一个像素值时,我得到了浮点值,这与我的预期有所不同。检查向量的结尾:

0.80784321,0.96470594,0.6156863,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.01568628、0.45882356、0.27058825,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.,0.,
    0.,0.,0.,0.])

要检查是否已标准化,以使每个向量都是单位范数,我这样做了:

from numpy import linalg as LA
LA.norm(X_train[0,:])
10.20854430695328


但是可以看出,向量的范数大于1。

因此,我认为可能没有像我想象的那样对它们进行缩放,也许它们是使用Z = X - mu/ std中的统计归一化进行缩放的。为了检查该假设,我通过了the scipy tutorial来缩放图像。为此,我使用以下命令检查了数据的均值和标准差:

X_train.mean(axis=0)




X_train.std(axis=0)


当我这样做时,我得到的是没有标准化的向量,即它们没有均值0或标准dev1。均值表示:

     1.48377906e-04,   3.16577558e-04,   4.71443878e-04,
     7.53226424e-04,   1.28991095e-03,   1.64713022e-03,
     1.94303042e-03,   2.20263827e-03,   2.67707680e-03,
     2.33504470e-03,   1.88178264e-03,   1.35629241e-03,
     7.74688105e-04,   3.29839591e-04,   1.72834236e-04,
     6.32442098e-05,   5.16221064e-05,   8.55615031e-06,
     0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
     0.00000000e+00])


性病者说:

     9.73316794e-03,   1.48564994e-02,   1.79109386e-02,
     2.39294057e-02,   2.96610268e-02,   3.52616872e-02,
     3.74964883e-02,   3.94864147e-02,   4.46018863e-02,
     4.14498684e-02,   3.67526868e-02,   3.19768868e-02,
     2.35492900e-02,   1.51583259e-02,   1.10631365e-02,
     6.06049238e-03,   6.49226612e-03,   1.41963927e-03,
     0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
     0.00000000e+00])


因此,我想知道,由于我已经尽了所有可能,因此在tensorflow教程中如何对MNIST数据集进行预处理。

最佳答案

如果您将数据包含在向量中,我们将其称为mnist,则可以检查最大值。

numpy.amax(mnist)


应该产生1,因此意味着向量中的所有值都在0和1之间,因此符合人体工程学标准。

08-24 14:32