python-3.x - 如何从从 keras 导入的 MNIST 数据集中删除特定数字?
问题描述
我正在尝试从 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' object has no attribute 'drop'
我应该怎么办?
更何况,如果我想减去数字0的数据,我可以简单地做x_train[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)
它们是随机顺序的。如果您只想通过连续切片来获取一小部分数据,这是一件好事,很容易获得包含每个数字的样本。但这会使您想做的任务变得更加困难。您需要与每个数字对应的索引。然后你需要使用这些索引来选择你想要的图像和标签。
您想查看名为 的 Numpy 数组方法nonzero()
,并且您将想了解 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)
推荐阅读
- google-sheets - 无法从 IF 公式中找到返回的 MAX 值?
- kotlin - Kotlin:函数声明必须有名称
- google-bigquery - 默认情况下,临时表和作业在 bigquery 上运行多长时间?
- c# - C# Linq 不能使用“大于”运算符
- c# - 使 ListView 项目选择表单 ItemSource
- python - Django平均模型输入
- c# - 通过搜索 Id 在 EF 中更新一对多
- angular - JWT Bearer ASP.Net Core 3.1 用户在服务器上为空白
- python - 代码仅处理 14 行中的第一行
- flutter - 当我有 BottomNavigatorBar 时无法使用 setState