无法将大小数组重塑为形状

时间:2020-02-02 17:43:00

标签: python-3.x numpy python-2.x

我正在https://www.youtube.com/watch?v=lbFEZAXzk0g上观看youtube上的机器学习视频。本教程位于python2中,因此我需要将其转换为python3。这是我遇到错误的代码部分:

def load_mnist_images(filename):
    if not os.path.exists(filename):
        download(filename)
    with gzip.open(filename,'rb') as file:
        data = numpy.frombuffer(file.read(),numpy.uint8, offset=16)
        data = data.reshape(-1,1,28,28)
        return data/numpy.float32(256)

我收到此错误: ValueError: cannot reshape array of size 9992 into shape (1,28,28).我该如何解决?在本教程中,它正在工作。另外,如果我有任何其他错误,请告诉我。

3 个答案:

答案 0 :(得分:1)

重塑具有以下语法

data.reshape(shape)

形状以元组(a,b)的形式传递。所以尝试,

data.reshape((-1, 1, 28, 28))

答案 1 :(得分:1)

您输入的元素数量与输出数组的元素数量不同。您输入的大小为9992。您的输出的大小为[? x 1 x 28 x 28],因为-1表示reshape命令应该确定沿着该维度的多少索引才能适合您的数组。 28x28x1是784,因此要重塑为该大小的任何输入都必须能被784整整整齐,以适合输出形状。 7842无法将9992整除,因此它抛出ValueError。这是一个最小的示例来说明:

import numpy as np

data = np.zeros(2352) # 2352 is 784 x 3
out = data.reshape((-1,1,28,28)) # executes correctly -  out is size [3,1,28,28]

data = np.zeros(9992) # 9992 is 784 x 12.745 ... not integer divisible
out = data.reshape((-1,1,28,28)) # throws ValueError: cannot reshape array of size 9992 into shape (1,28,28)

因此,如果您不希望出现ValueError,则需要将输入调整为适合其正确大小的其他大小的数组。

答案 2 :(得分:1)

尝试这样

import numpy as np

x_train_reshaped=np.reshape(x_train,(60000, 28, 28))
x_test_reshaped=np.reshape(x_test,(10000, 28, 28))