hands on machine learning第三章问题
import scipy.io
mnist = scipy.io.loadmat('mnist-original.mat')
mnist.keys()
X,y=mnist['data'],mnist['label']
X.shape
y.shape
import matplotlib
import matplotlib.pyplot as plt
some_digit = X[0]
some_digit_image=some_digit.reshape(28,28)
#报错误:valueError: cannot reshape array of size 70000 into shape (28,28)
如何解决,是不是本人没有安装tensorflow的原因?
这个问题与是否安装TensorFlow无关。
修改代码:
import scipy.io
mnist = scipy.io.loadmat('mnist-original.mat')
mnist.keys()
X,y=mnist['data'].T, mnist['label'].T
通过.T
操作符对加载的数组进行转置操作,将(70000, 784)的数组转换为(784, 70000)形状的数组,以适应后续操作。同样地,也将(70000, 1)的数组转换为(1, 70000)形状的数组。之后,再继续运行接下来的代码即可成功执行some_digit_image=some_digit.reshape(28,28)
。
错误不是说some_digit数组的大小不对嘛,跟装不装TensorFlow有啥关系,你可以创一个索引为0的图像,把它的形状设置为(28, 28)
import numpy as np
index = 0
some_digit = X[index]
some_digit_image = some_digit.reshape(28, 28)
plt.imshow(some_digit_image, cmap='binary')
plt.axis("off")
plt.show()
不知道你这个问题是否已经解决, 如果还没有解决的话:由于X中的样本数据维度不正确,所以无法被正确地重新形状为(28, 28)的图像。从错误信息ValueError: cannot reshape array of size 70000 into shape (28, 28)可以看出,X的样本数是70000个,而不是28x28的图像。