这是什么样的重塑以及为什么要使用它?

时间:2018-04-30 19:53:44

标签: python numpy

对于一个非常愚蠢的问题感到抱歉。我一直试图找到答案。

所以我浏览了一篇关于“卷积神经网络”的指南,发现它使用的numpy.reshape函数看起来像这样:

testX.reshape([-1, 28, 28, 1])

这对我来说是中国人,因为我无法想象它与四个维度有关,也不是某种反向函数。

编辑:这是该功能的上下文。现在我甚至不确定它是否是一个笨拙的功能:

import tflearn.datasets.mnist as mnist
X, Y, testX, testY = mnist.load_data(one_hot=True)
X = X.reshape([-1, 28, 28, 1])
testX = testX.reshape([-1, 28, 28, 1])

2 个答案:

答案 0 :(得分:2)

在您的示例(MNIST)中,[-1, 28, 28, 1]代表

[training_examples, hight, width, channels]
对于训练样例,

-1,因为数字未知,高度和宽度应该清晰。

通道数:灰度图片使用1个通道,RBG使用3个通道。 由于MNIST有灰度图片,这里有1(0到256之间的值)。

答案 1 :(得分:2)

我假设您正在使用MNIST,或者使用一组28 x 28图像的类似数据集。也许这些图像以784长度的阵列呈现。

x = []
for _ in range(10):
    x.append(range(28 ** 2))
np.array(x).reshape([-1, 28, 28, 1])

这会将您的数据集转换为一组28 x 28 x 1矩阵,如果您尝试了解28 x 28且只有一种颜色的图像,这将非常有用。< / p>

它还将确定您拥有10张图片,并将您的数组转换为10 matrices形状28 x 28 x 1

np.array(x).reshape([-1, 28, 28, 1]).shape == (10, 28, 28, 1)

28 x 28 x 1代替28 x 28的原因有时候这是一种更清晰的方式来解释有28 x 28个方格和单一颜色。如果它让您感到困惑,则无需添加单维宽度,您可以轻松地将其映射到形状为28 x 28的矩阵。但是想象你有一个彩色图像的数据集,你可能会将它映射到28 x 28 x 3以表明它是一个带有28 x 28正方形的图像,并且每个正方形都有一个值三种颜色。

因此,它是一组-1张图片,其中-1表示计算正确的图片数量(10),每张图片都有28 * 28个值,以及给每个值赋予它自己的维(1)