Var*_*mar 9 numpy python-2.x python-3.x
我正在观看 YouTube 上的机器学习视频:https://www.youtube.com/watch?v =lbFEZAXzk0g 。该教程是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)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ValueError: cannot reshape array of size 9992 into shape (1,28,28).如何解决此问题?在教程中它正在工作。另外,如果我有任何其他错误,请告诉我。
您的输入与输出数组的元素数量不同。您的输入大小为 9992。您的输出大小为 [? x 1 x 28 x 28],因为 -1 表示 reshape 命令应确定沿此维度需要多少个索引才能适合您的数组。28x28x1 是 784,因此您想要重塑为该大小的任何输入都必须能够被 784 整除,以便它适合输出形状。9992 不能被 784 整除,因此它会抛出 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)
Run Code Online (Sandbox Code Playgroud)
因此,如果您不想要 ValueError,则需要将输入重新调整为正确大小的不同大小的数组。
小智 2
重塑具有以下语法
data.reshape(shape)
Run Code Online (Sandbox Code Playgroud)
形状以元组 (a, b) 的形式传递。所以尝试一下
data.reshape((-1, 1, 28, 28))
Run Code Online (Sandbox Code Playgroud)