我正在尝试从Keras提供的MNIST数据集中删除特定的数字(例如0、4)。
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train.drop([0], axis = 1)
y_train.drop([0], axis = 1)
x_train_0 = x_trian[0]
y_train_0 = y_train[0]
原来是一个错误:AttributeError:'numpy.ndarray'对象没有属性'drop'
我该怎么办?
还有,如果我想减去数字0的数据,我可以简单地做x_train [0]吗?
谢谢!
答案 0 :(得分:0)
首先让我们看看Keras MNIST数据格式。
>>> from keras.datasets import mnist
>>> (x_train, y_train), (x_test, y_test) = mnist.load_data()
>>> x_train.shape
(60000, 28, 28)
>>> y_train.shape
(60000,)
因此,x_...
变量保存图像,而y_...
变量保存标签。它们都是Numpy数组对象。数据按什么顺序?
>>> y_train[:20]
array([5, 0, 4, 1, 9, 2, 1, 3, 1, 4, 3, 5, 3, 6, 1, 7, 2, 8, 6, 9],
dtype=uint8)
它们以随机顺序排列。如果您只想获取一个连续的切片就可以获取一小部分数据,那么这是一件好事,很容易获得包含每个数字的样本。但这会使您要完成的任务更加困难。您需要与每个数字相对应的索引。然后,您需要使用这些索引来选择图像和所需的标签。
您想查看称为nonzero()
的Numpy数组方法,并且您将要了解Numpy如何使用布尔值数组从具有兼容形状的数组中选择元素。此两行功能将满足您的需求:
def remove(digit, x, y):
idx = (y != digit).nonzero()
return x[idx], y[idx]
下面是如何调用它的示例:
x_no3, y_no3 = remove(3, x_train, y_train)