Как удалить конкретную цифру из набора данных MNIST, импортированного из keras? - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь удалить конкретную цифру (например, 0, 4) из набора данных MNIST, предоставленного Keras.

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]?

Спасибо !!!

1 Ответ

0 голосов
/ 02 ноября 2019

Давайте сначала посмотрим на формат данных 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 использует массивы Boolean. значения для выбора элементов из массивов с совместимыми формами. Эта двухстрочная функция будет делать то, что вам нужно:

def remove(digit, x, y):
    idx = (y != digit).nonzero()
    return x[idx], y[idx]

А вот пример того, как ее вызвать:

x_no3, y_no3 = remove(3, x_train, y_train)
...