hands on machine learning第三章

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的图像。