Использование данных MNIST с Keras - PullRequest
2 голосов
/ 27 июня 2019

В настоящее время я работаю с данными MNIST, как часть курса по использованию numpy и tenorflow.Я выполнял код, который они предоставили в курсе, и заметил несколько предупреждений от tenorflow при запуске этого фрагмента кода:

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("../data/mnist_data/", one_hot=True)

Я посмотрел документацию и прочитал, что это устарело, и следует использовать MNIST изkeras вместо.Поэтому я изменил приведенный выше код на этот

from keras.datasets import mnist
from keras.models import Sequential, load_model
from keras.layers.core import Dense, Dropout, Activation
from keras.utils import np_utils

(X_train, y_train), (X_test, y_test) = mnist.load_data()

. Теперь моя проблема заключается в том, что в материале курса они используют эту функцию:

training_digits, training_labels = mnist.train.next_batch(5000)

эта функция next_batch() недоступна приkeras и оригинальный набор данных MNIST довольно большой.Есть ли разумный способ сделать это с помощью keras?

Большое спасибо заранее!

Ответы [ 3 ]

1 голос
/ 27 июня 2019

вы можете установить batch_size и использовать итератор одного выстрела (), как описано здесь Документация Keras Mnist

0 голосов
/ 27 июня 2019

Проблема заключается в том, что в вашем руководстве используется API, отличный от API набора данных keras, используемого в большинстве современных учебных пособий. При использовании keras.dataset API вы пытаетесь «пересечь потоки».

У вас (в широком смысле) есть три варианта:

Вариант 1

Просто придерживайтесь существующего учебника и игнорируйте предупреждения об устаревании. Супер просто, но вы можете пропустить преимущества keras api (новый стандарт), если вы не собираетесь изучать это позже

Вариант 2

Полностью переключитесь на keras API и найдите новый учебник. Этот является примером MNIST всего в нескольких строках кода:

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])


model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test, y_test)

Если он вам доступен, я бы рекомендовал этот вариант. keras - это новое значение по умолчанию. Возможно, это не вариант, или вы хотите придерживаться своего первоначального курса, но я определенно рекомендую в ближайшее время ознакомиться с keras.

Вариант 3

Найдите способ успешно «пересечь потоки».

Это более сложно, но, безусловно, можно сделать. В конце концов, keras.dataset для mnist - это просто большой массив. Вы можете посмотреть в API набора данных (в частности, load_from_tensor() и load_from_tensor_slices()). Эти параметры потребуют небольшого спора, потому что по своей сути (как вы обнаружили) набор данных, возвращаемый из нового метода, отличается от типа, возвращаемого из старых.

UPDATE:

Ссылка в ответе nag предоставляет исчерпывающий пример того, что я не знал ранее!

0 голосов
/ 27 июня 2019

Используйте Sequential () от Keras. Этот Sequential () имеет метод fit (), в котором вы можете установить batchSize в параметре. См. Документацию: керас последовательный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...