我正在通过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之间,因此符合人体工程学标准。