I'estou tentando implementar o exemplo de classificação binária usando o conjunto de dados IMDb em Google Colab. Eu já implementei este modelo antes. Mas quando tentei fazer isso novamente após alguns dias, ele retornou um erro de valor:'Object arrays cannot be loaded when allow_pickle=False' para a função load_data().
Já tentei resolver isto, referindo-me a uma resposta existente para um problema semelhante: https://stackoverflow.com/questions/55824625/how-to-fix-object-arrays-cannot-be-loaded-when-allow-pickle-false-in-the-sketc?answertab=votes#tab-top Mas acontece que apenas adicionar um argumento allow_pickle é't suficiente.
O meu código:
de keras.datasets importar imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
O erro:
ValueError Traceback (última chamada mais recente)
<ipython-input-1-2ab3902db485> in <module>()
1 de keras.datasets importar imdb
----> 2 (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
2 quadros
/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 com np.load(path) como f:
---> 59 x_train, label_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 formato de retorno.read_array(bytes),
261 allow_pickle=self.allow_pickle,
--> 262 pickle_kwargs=self.pickle_kwargs)
263 mais:
264 return self.zip.read(key)
/usr/local/lib/python3.6/dist-packages/numpy/lib/format.py em read_array(fp, allow_pickle, pickle_kwargs)
690 # O array continha objetos Python. Temos de desfazer os dados.
691 se não permitir_pickle:
--> 692 raise ValueError("Arrays de objetos não podem ser carregados quando "
693 "allow_pickle=False")
694 se o pickle_kwargs não é nenhum:
ValueError: As matrizes de objetos não podem ser carregadas quando allow_pickle=False
Esta questão ainda está em cima do Keras Git. Espero que seja resolvido o mais rápido possível. Até lá, tente rebaixar a sua versão numérica para 1.16.2. Parece resolver o problema.
!pip install numpy==1.16.1
import numpy as np
Esta versão de numpy tem o valor padrão de 'allow_pickle' como 'True'.
Seguindo esta questão no GitHub, a solução oficial é editar o arquivo imdb.py. Esta correção funcionou bem para mim sem a necessidade de fazer downgrade do numpy. Encontre o arquivo imdb.py em tensorflow/python/keras/datasets/imdb.py
(o caminho completo para mim foi: C:\Anaconda\Lib-pacotes de sites-pacotes de sensores
imdb.py` - outras instalações serão diferentes) e mude a linha 85 conforme a diff:
- with np.load(path) as f:
+ with np.load(path, allow_pickle=True) as f:
O motivo da mudança é a segurança para evitar o equivalente em Python de uma injeção SQL em um arquivo em pickled. A alteração acima só irá afetar os dados imdb e você, portanto, manterá a segurança em outro lugar (não fazendo downgrade numpy).
Sim, a instalação prévia de uma versão de numpy resolveu o problema.
Para aqueles que utilizam o PyCharm IDE:
no meu IDE (Pycharm), File->Settings->Project Interpreter: Encontrei o meu numpy na 1.16.3, por isso volto à 1.16.1. Clique + e digite numpy na busca, marque "especifique version" : 1.16.1 e escolha-> instale o pacote.