Je joue actuellement avec les données MNIST dans le cadre bien sûr de l'utilisation de numpy et tensorflow. J'exécutais le code qu'ils ont fourni dans le cours et j'ai remarqué quelques avertissements de tensorflow lors de l'exécution de cet extrait de code:
training_digits, training_labels = mnist.train.next_batch(5000)
J'ai regardé dans la documentation et lu que cela est obsolète et qu'il faut utiliser MNIST de keras à la place. J'ai donc changé le code ci-dessus en suivant
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()
mon problème est maintenant que dans le matériel de cours, ils utilisent cette fonction:
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("../data/mnist_data/", one_hot=True)
cette fonction next_batch () n'est pas disponible avec keras et le jeu de données MNIST original est assez volumineux. Y a-t-il un moyen intelligent de faire cela avec les keras?
Merci d'avance!
3 Réponses :
Utilisez Sequential () de Keras. Ce Sequential () a une méthode appelée fit (), vous pouvez y définir batchSize en paramètre. Keras Sequential
Merci pour le lien. Je ne suis pas sûr de comprendre la documentation.
Le problème est que votre didacticiel utilise une API différente de l'API de l'ensemble de données keras utilisée dans la plupart des didacticiels actuels. En utilisant l'API keras.dataset , vous essayez de «traverser les flux».
Vous avez (globalement) trois options:
Tenez-vous en à votre didacticiel existant et ignorez les avertissements d'obsolescence. Super simple mais vous risquez de manquer les avantages de l'API keras (la nouvelle valeur par défaut) à moins que vous n'ayez l'intention de l'apprendre plus tard
Passez entièrement à la keras API et trouvez un nouveau tutoriel. Celui-ci est un exemple MNIST en quelques lignes de code: p>
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)
Si c'est disponible pour vous, c'est l'option que je recommanderais. keras est la nouvelle valeur par défaut. Ce n'est peut-être pas une option ou vous souhaitez vous en tenir à votre cours d'origine, mais je recommanderais certainement de vous familiariser bientôt avec keras .
Trouvez un moyen de réussir à «traverser les flux».
Ceci est plus délicat mais peut certainement être fait. Le keras.dataset pour mnist est juste un grand tableau après tout. Vous pouvez regarder dans l'API Dataset (en particulier load_from_tensor () et load_from_tensor_slices () ). Cependant, ces options nécessiteraient un peu de discussion car par nature (comme vous l'avez découvert) l'ensemble de données renvoyé par la nouvelle méthode est d'un type différent de celui renvoyé par les anciennes.
MISE À JOUR:
Le lien dans la réponse de nag fournit un exemple complet de ce que je n'étais pas au courant auparavant!
vous pouvez définir batch_size et utiliser one shot iterator () comme décrit ici Documentation Keras Mnist < / p>
Cela ressemble à ce que je recherche. J'essaye de l'intégrer dans mon code. J'ai défini la taille du lot à 5000, mais pour une raison quelconque, lorsque j'essaie de retourner (X_train, y_train) , j'obtiens un point d'interrogation en regardant la forme.
Essayer de comprendre cela ATM. Mais comment transformer un tenseur avec cette forme par exemple TensorShape ([Dimension (None), Dimension (10)]) en un tableau?
Ça fonctionne avec la taille de données réduite de 60000 à 5000 pour les données de train et de 10000 à 200 pour les données de test. Merci pour l'aide!!!
Une manière intelligente est d'utiliser la méthode décrite dans le didacticiel et de ne pas se soucier des "obsolètes" et des "avertissements". Une fois que vous l'avez appris sans Keras, vous pouvez essayer de le faire avec Keras.
Je l'ai déjà fait, désolé si ce n'était pas clair dans mon message initial. Merci quand même.