Ich versuche, das Beispiel für die binäre Klassifizierung mithilfe des IMDb-Datasets in Google Colab zu implementieren . Ich habe dieses Modell schon einmal implementiert. Als ich es jedoch nach einigen Tagen erneut versuchte, gab es einen Wertefehler zurück: 'Objektarrays können nicht geladen werden, wenn allow_pickle = False' für die Funktion load_data ().
Ich habe bereits versucht, dieses Problem zu lösen, indem ich mich auf eine vorhandene Antwort auf ein ähnliches Problem bezog: So beheben Sie das Problem , dass 'Objektarrays nicht geladen werden können, wenn allow_pickle = False' im Sketch_rnn-Algorithmus. Es stellt sich jedoch heraus, dass das Hinzufügen eines allow_pickle-Arguments nicht ausreicht.
Mein Code:
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
Der Fehler:
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)
, jetzt ist esnp.load(path, boolean)
Standardmäßig ist der Boolesche Wert (allow_pickle) falschnp.savez
Dokumente angesehen, aber es gab keinen Hinweis auf das Beizen, daher habe ich keine Ahnung, woher es überhaupt wusste, dass die Dinge, die ich gespeichert habe, Pytorch-Zeug waren und nicht nur numpy ... seltsam! Wenn Sie wissen, was los ist, teilen Sie es uns mit :)Antworten:
Hier ist ein Trick, den Sie erzwingen müssen
imdb.load_data
, damit das Beizen in Ihrem Notizbuch diese Zeile ersetzt:dadurch:
quelle
TypeError: <lambda>() got multiple values for keyword argument 'allow_pickle'
Dieses Problem ist immer noch bei Keras Git. Ich hoffe es wird so schnell wie möglich gelöst. Versuchen Sie bis dahin, Ihre Numpy-Version auf 1.16.2 herunterzustufen. Es scheint das Problem zu lösen.
Diese Version von numpy hat den Standardwert
allow_pickle
asTrue
.quelle
Nach diesem Problem auf GitHub besteht die offizielle Lösung darin, die Datei imdb.py zu bearbeiten. Dieses Update hat bei mir gut funktioniert, ohne dass Numpy herabgestuft werden musste. Suchen Sie die Datei imdb.py unter
tensorflow/python/keras/datasets/imdb.py
(vollständiger Pfad für mich war:C:\Anaconda\Lib\site-packages\tensorflow\python\keras\datasets\imdb.py
- andere Installationen sind anders) und ändern Sie Zeile 85 gemäß dem Diff:Der Grund für die Änderung ist die Sicherheit, um das Python-Äquivalent einer SQL-Injection in einer ausgewählten Datei zu verhindern. Die obige Änderung wirkt sich NUR auf die IMDB-Daten aus und Sie behalten daher die Sicherheit an anderer Stelle (indem Sie numpy nicht herabstufen).
quelle
Ich habe gerade allow_pickle = True als Argument für np.load () verwendet und es hat bei mir funktioniert.
quelle
In meinem Fall arbeitete mit:
quelle
Ich denke die Antwort von cheez ( https://stackoverflow.com/users/122933/cheez ) ist die einfachste und effektivste. Ich würde ein wenig darauf eingehen, damit eine Numpy-Funktion nicht für den gesamten Sitzungszeitraum geändert wird.
Mein Vorschlag ist unten. Ich verwende es, um den Reuters-Datensatz von Keras herunterzuladen, der die gleiche Art von Fehler anzeigt:
quelle
Sie können versuchen, den Wert des Flags zu ändern
quelle
Keine der oben aufgeführten Lösungen hat bei mir funktioniert: Ich verwende Anaconda mit Python 3.7.3. Was für mich funktioniert hat war
Führen Sie "conda install numpy == 1.16.1" von Anaconda Powershell aus
Schließen Sie das Notebook und öffnen Sie es erneut
quelle
allow_pickle=True
Standardwert.auf jupyter notebook mit
hat gut funktioniert, aber das Problem tritt auf, wenn Sie diese Methode in spyder verwenden (Sie müssen den Kernel jedes Mal neu starten, sonst erhalten Sie eine Fehlermeldung wie:
Ich löste dieses Problem , die Lösung unter Verwendung von hier :
quelle
Ich bin hier oben gelandet, habe deine Wege ausprobiert und konnte es nicht herausfinden.
Ich habe tatsächlich an einem vorgegebenen Code gearbeitet, wo
wurde verwendet, also habe ich es durch ersetzt
quelle
Ja, die Installation einer früheren Version von numpy hat das Problem behoben.
Für diejenigen, die PyCharm IDE verwenden:
In meiner IDE (Pycharm), Datei-> Einstellungen-> Projektinterpreter: Ich habe festgestellt, dass meine Nummer 1.16.3 ist, und kehre daher zu 1.16.1 zurück. Klicken Sie auf + und geben Sie numpy in die Suche ein, kreuzen Sie "Version angeben": 1.16.1 an und wählen Sie -> Paket installieren.
quelle
Finde den Pfad zu imdb.py und füge dann einfach das Flag zu np.load hinzu (Pfad, ... Flag ...)
quelle
Es ist Arbeit für mich
quelle
Was ich gefunden habe ist, dass TensorFlow 2.0 (ich verwende 2.0.0-alpha0) nicht mit der neuesten Version von Numpy kompatibel ist, dh v1.17.0 (und möglicherweise v1.16.5 +). Sobald TF2 importiert wird, wird eine riesige Liste von FutureWarning ausgegeben, die ungefähr so aussieht:
Dies führte auch zu dem Fehler allow_pickle, wenn versucht wurde, das imdb-Dataset von Keras zu laden
Ich habe versucht, die folgende Lösung zu verwenden, die einwandfrei funktioniert hat, aber ich musste sie bei jedem einzelnen Projekt ausführen, bei dem ich TF2 oder tf.keras importierte.
Die einfachste Lösung, die ich gefunden habe, war, entweder numpy 1.16.1 global zu installieren oder kompatible Versionen von Tensorflow und numpy in einer virtuellen Umgebung zu verwenden.
Mein Ziel mit dieser Antwort ist es, darauf hinzuweisen, dass es nicht nur ein Problem mit imdb.load_data ist, sondern ein größeres Problem, das durch die Inkompatibilität von TF2- und Numpy-Versionen verursacht wird und zu vielen anderen versteckten Fehlern oder Problemen führen kann.
quelle
Tensorflow hat einen Fix in der tf-nightly-Version.
Die aktuelle Version ist '2.0.0-dev20190511'.
quelle
Die Antwort von @cheez funktioniert manchmal nicht und ruft die Funktion immer wieder rekursiv auf. Um dieses Problem zu lösen, sollten Sie die Funktion gründlich kopieren. Sie können dies mithilfe der Funktion
partial
tun. Der endgültige Code lautet also:quelle
Normalerweise poste ich nicht auf diese Dinge, aber das war super nervig. Die Verwirrung ergibt sich aus der Tatsache, dass einige der Keras-
imdb.py
Dateien bereits aktualisiert wurden:zur Version mit
allow_pickle=True
. Überprüfen Sie in der Datei imdb.py, ob diese Änderung bereits implementiert wurde. Wenn es angepasst wurde, funktioniert Folgendes einwandfrei:quelle
Am einfachsten ist es, die
imdb.py
Einstellung an der Zeile zu ändernallow_pickle=True
,np.load
an derimdb.py
Fehler ausgegeben werden.quelle