Estoy tratando de implementar el ejemplo de clasificación binaria usando el conjunto de datos IMDb en Google Colab . He implementado este modelo antes. Pero cuando intenté hacerlo nuevamente después de unos días, devolvió un error de valor: 'Las matrices de objetos no se pueden cargar cuando allow_pickle = False' para la función load_data ().
Ya intenté resolver esto, refiriéndome a una respuesta existente para un problema similar: Cómo arreglar 'Las matrices de objetos no se pueden cargar cuando allow_pickle = False' en el algoritmo sketch_rnn Pero resulta que simplemente agregar un argumento allow_pickle no es suficiente.
Mi código:
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
El error:
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)
, ahora esnp.load(path, boolean)
De forma predeterminada, el booleano (allow_pickle) es falsonp.savez
documentos, pero no había ninguna referencia al decapado, así que no tengo idea de cómo supo en primer lugar que las cosas que estaba guardando eran cosas de Pytorch y no solo numpy ... ¡extrañas! Si sabe lo que está pasando, comparta con nosotros :)Respuestas:
Aquí hay un truco para forzar
imdb.load_data
a permitir el encurtido, en su cuaderno, reemplazando esta línea:por esto:
fuente
TypeError: <lambda>() got multiple values for keyword argument 'allow_pickle'
Este problema todavía está pendiente en keras git. Espero que se resuelva lo antes posible. Hasta entonces, intente degradar su versión numpy a 1.16.2. Parece solucionar el problema.
Esta versión de numpy tiene el valor predeterminado
allow_pickle
comoTrue
.fuente
Siguiendo este problema en GitHub, la solución oficial es editar el archivo imdb.py. Esta solución funcionó bien para mí sin la necesidad de degradar numpy. Busque el archivo imdb.py en
tensorflow/python/keras/datasets/imdb.py
(la ruta completa para mí fue:C:\Anaconda\Lib\site-packages\tensorflow\python\keras\datasets\imdb.py
- otras instalaciones serán diferentes) y cambie la línea 85 según la diferencia:El motivo del cambio es la seguridad para evitar el equivalente en Python de una inyección SQL en un archivo decapado. El cambio anterior SOLO afectará a los datos de imdb y, por lo tanto, conservará la seguridad en otro lugar (al no degradar numpy).
fuente
Acabo de usar allow_pickle = True como argumento para np.load () y funcionó para mí.
fuente
En mi caso trabajé con:
fuente
Creo que la respuesta de cheez ( https://stackoverflow.com/users/122933/cheez ) es la más fácil y efectiva. Lo explicaría un poco más para que no modificara una función numpy durante todo el período de sesión.
Mi sugerencia está a continuación. Lo estoy usando para descargar el conjunto de datos de reuters de keras, que muestra el mismo tipo de error:
fuente
Puedes intentar cambiar el valor de la bandera
fuente
ninguna de las soluciones enumeradas anteriormente funcionó para mí: ejecuto anaconda con python 3.7.3. Lo que funcionó para mí fue
ejecutar "conda install numpy == 1.16.1" desde Anaconda powershell
cerrar y volver a abrir el cuaderno
fuente
allow_pickle=True
está el valor predeterminado.en el cuaderno jupyter usando
funcionó bien, pero el problema aparece cuando usa este método en spyder (tiene que reiniciar el kernel cada vez o obtendrá un error como:
Resolví este problema usando la solución aquí :
fuente
Aterricé aquí, probé tus caminos y no pude entenderlo.
De hecho, estaba trabajando en un código predeterminado donde
se usó, así que lo reemplacé con
fuente
Sí, la instalación de una versión anterior de numpy resolvió el problema.
Para aquellos que usan PyCharm IDE:
en mi IDE (Pycharm), Archivo-> Configuración-> Intérprete del proyecto: encontré que mi número es 1.16.3, así que vuelvo a 1.16.1. Haga clic en + y escriba numpy en la búsqueda, marque "especificar versión": 1.16.1 y elija -> instalar paquete.
fuente
encuentre la ruta a imdb.py y luego simplemente agregue la bandera a np.load (ruta, ... bandera ...)
fuente
Es trabajo para mi
fuente
Lo que encontré es que TensorFlow 2.0 (estoy usando 2.0.0-alpha0) no es compatible con la última versión de Numpy, es decir, v1.17.0 (y posiblemente v1.16.5 +). Tan pronto como se importa TF2, arroja una gran lista de FutureWarning, que se parece a esto:
Esto también resultó en el error allow_pickle cuando se intentó cargar el conjunto de datos imdb desde keras
Intenté usar la siguiente solución que funcionó bien, pero tuve que hacerlo en cada proyecto en el que estaba importando TF2 o tf.keras.
La solución más fácil que encontré fue instalar numpy 1.16.1 globalmente o usar versiones compatibles de tensorflow y numpy en un entorno virtual.
Mi objetivo con esta respuesta es señalar que no es solo un problema con imdb.load_data, sino un problema mayor debido a la incompatibilidad de las versiones TF2 y Numpy y puede resultar en muchos otros errores o problemas ocultos.
fuente
Tensorflow tiene una solución en la versión tf-nightly.
La versión actual es '2.0.0-dev20190511'.
fuente
La respuesta de @cheez en algún momento no funciona y llama de forma recursiva a la función una y otra vez. Para resolver este problema, debe copiar la función en profundidad. Puede hacer esto usando la función
partial
, por lo que el código final es:fuente
Normalmente no publico en estas cosas, pero esto fue muy molesto. La confusión proviene del hecho de que algunos de los
imdb.py
archivos de Keras ya se han actualizado:a la versión con
allow_pickle=True
. Asegúrese de verificar el archivo imdb.py para ver si este cambio ya se implementó. Si se ha ajustado, lo siguiente funciona bien:fuente
La forma más sencilla es cambiar la
imdb.py
configuraciónallow_pickle=True
anp.load
la línea dondeimdb.py
arroja el error.fuente