我正在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).
我该如何解决?在本教程中,它正在工作。另外,如果我有任何其他错误,请告诉我。
答案 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))