J'essaie d'implémenter l'exemple de classification binaire en utilisant l'ensemble de données IMDb dans Google Colab . J'ai déjà implémenté ce modèle. Mais quand j'ai essayé de le faire à nouveau après quelques jours, cela a renvoyé une erreur de valeur: `` Les tableaux d'objets ne peuvent pas être chargés lorsque allow_pickle = False '' pour la fonction load_data ().
J'ai déjà essayé de résoudre cela, en faisant référence à une réponse existante pour un problème similaire: Comment réparer `` Les tableaux d'objets ne peuvent pas être chargés lorsque allow_pickle = False '' dans l'algorithme sketch_rnn Mais il s'avère que l'ajout d'un argument allow_pickle n'est pas suffisant.
Mon code:
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
L'erreur:
ValueError Traceback (most recent call last)
<ipython-input-1-2ab3902db485> in <module>()
1 from keras.datasets import imdb
----> 2 (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
2 frames
/usr/local/lib/python3.6/dist-packages/keras/datasets/imdb.py in load_data(path, num_words, skip_top, maxlen, seed, start_char, oov_char, index_from, **kwargs)
57 file_hash='599dadb1135973df5b59232a0e9a887c')
58 with np.load(path) as f:
---> 59 x_train, labels_train = f['x_train'], f['y_train']
60 x_test, labels_test = f['x_test'], f['y_test']
61
/usr/local/lib/python3.6/dist-packages/numpy/lib/npyio.py in __getitem__(self, key)
260 return format.read_array(bytes,
261 allow_pickle=self.allow_pickle,
--> 262 pickle_kwargs=self.pickle_kwargs)
263 else:
264 return self.zip.read(key)
/usr/local/lib/python3.6/dist-packages/numpy/lib/format.py in read_array(fp, allow_pickle, pickle_kwargs)
690 # The array contained Python objects. We need to unpickle the data.
691 if not allow_pickle:
--> 692 raise ValueError("Object arrays cannot be loaded when "
693 "allow_pickle=False")
694 if pickle_kwargs is None:
ValueError: Object arrays cannot be loaded when allow_pickle=False
np.load(path)
, maintenant c'estnp.load(path, boolean)
Par défaut, le booléen (allow_pickle) est fauxnp.savez
documents mais il n'y avait aucune référence au décapage, donc je ne sais pas comment il savait même en premier lieu que les choses que je sauvegardais étaient des trucs de Pytorch et pas seulement stupides ... bizarres! Si vous savez ce qui se passe, partagez avec nous :)Réponses:
Voici une astuce pour forcer
imdb.load_data
à autoriser pickle en remplaçant cette ligne dans votre cahier:par ça:
la source
TypeError: <lambda>() got multiple values for keyword argument 'allow_pickle'
Ce problème est toujours d'actualité sur keras git. J'espère que cela sera résolu le plus tôt possible. Jusque-là, essayez de rétrograder votre version numpy à 1.16.2. Cela semble résoudre le problème.
Cette version de numpy a la valeur par défaut de
allow_pickle
asTrue
.la source
Suite à ce problème sur GitHub, la solution officielle consiste à éditer le fichier imdb.py. Ce correctif a bien fonctionné pour moi sans qu'il soit nécessaire de rétrograder numpy. Trouvez le fichier imdb.py à
tensorflow/python/keras/datasets/imdb.py
(le chemin complet pour moi était:C:\Anaconda\Lib\site-packages\tensorflow\python\keras\datasets\imdb.py
- les autres installations seront différentes) et changez la ligne 85 selon le diff:La raison du changement est la sécurité pour empêcher l'équivalent Python d'une injection SQL dans un fichier pickled. Le changement ci-dessus affectera UNIQUEMENT les données imdb et vous conservez donc la sécurité ailleurs (en ne rétrogradant pas numpy).
la source
Je viens d'utiliser allow_pickle = True comme argument de np.load () et cela a fonctionné pour moi.
la source
Dans mon cas, j'ai travaillé avec:
la source
Je pense que la réponse de cheez ( https://stackoverflow.com/users/122933/cheez ) est la plus simple et la plus efficace. Je développerais un peu dessus pour ne pas modifier une fonction numpy pendant toute la période de session.
Ma suggestion est ci-dessous. Je l'utilise pour télécharger le jeu de données reuters de keras qui montre le même type d'erreur:
la source
Vous pouvez essayer de changer la valeur de l'indicateur
la source
aucune des solutions énumérées ci-dessus n'a fonctionné pour moi: je lance anaconda avec python 3.7.3. Ce qui a fonctionné pour moi était
exécutez "conda install numpy == 1.16.1" depuis Anaconda powershell
fermez et rouvrez le notebook
la source
allow_pickle=True
est la valeur par défaut.sur le notebook jupyter en utilisant
a bien fonctionné, mais le problème apparaît lorsque vous utilisez cette méthode dans spyder (vous devez redémarrer le noyau à chaque fois ou vous obtiendrez une erreur comme:
J'ai résolu ce problème en utilisant la solution ici :
la source
J'ai atterri ici, j'ai essayé vos voies et je n'ai pas pu comprendre.
Je travaillais en fait sur un code prédéfini où
a été utilisé alors je l'ai remplacé par
la source
Oui, l'installation d'une version précédente de numpy a résolu le problème.
Pour ceux qui utilisent PyCharm IDE:
dans mon IDE (Pycharm), File-> Settings-> Project Interpreter: j'ai trouvé que mon numpy était 1.16.3, donc je reviens à 1.16.1. Cliquez sur + et tapez numpy dans la recherche, cochez "spécifier la version": 1.16.1 et choisissez -> installer le package.
la source
trouvez le chemin vers imdb.py puis ajoutez simplement le drapeau à np.load (chemin, ... drapeau ...)
la source
Son travail pour moi
la source
Ce que j'ai trouvé, c'est que TensorFlow 2.0 (j'utilise 2.0.0-alpha0) n'est pas compatible avec la dernière version de Numpy, c'est-à-dire v1.17.0 (et peut-être v1.16.5 +). Dès que TF2 est importé, il lance une énorme liste de FutureWarning, qui ressemble à ceci:
Cela a également entraîné l'erreur allow_pickle lors de la tentative de chargement du jeu de données imdb à partir de keras
J'ai essayé d'utiliser la solution suivante qui fonctionnait très bien, mais je devais le faire à chaque projet où j'importais TF2 ou tf.keras.
La solution la plus simple que j'ai trouvée était soit d'installer numpy 1.16.1 globalement, soit d'utiliser des versions compatibles de tensorflow et numpy dans un environnement virtuel.
Mon objectif avec cette réponse est de souligner que ce n'est pas seulement un problème avec imdb.load_data, mais un problème plus important provoqué par l'incompatibilité des versions TF2 et Numpy et peut entraîner de nombreux autres bogues ou problèmes cachés.
la source
Tensorflow a un correctif dans la version tf-nightly.
La version actuelle est «2.0.0-dev20190511».
la source
La réponse de @cheez parfois ne fonctionne pas et appelle récursivement la fonction encore et encore. Pour résoudre ce problème, vous devez copier la fonction en profondeur. Vous pouvez le faire en utilisant la fonction
partial
, le code final est donc:la source
Je ne poste généralement pas sur ces choses mais c'était super ennuyeux. La confusion vient du fait que certains des
imdb.py
fichiers Keras ont déjà été mis à jour:à la version avec
allow_pickle=True
. Assurez-vous de vérifier le fichier imdb.py pour voir si ce changement a déjà été implémenté. S'il a été ajusté, ce qui suit fonctionne correctement:la source
La façon la plus simple est de changer
imdb.py
paramètreallow_pickle=True
ànp.load
la ligne oùimdb.py
jette l' erreur.la source