How to fix 'Object arrays cannot be loaded when allow_pickle=False' for imdb.load_data() function? How to fix 'Object arrays cannot be loaded when allow_pickle=False' for imdb.load_data() function? python python

How to fix 'Object arrays cannot be loaded when allow_pickle=False' for imdb.load_data() function?


Here's a trick to force imdb.load_data to allow pickle by, in your notebook, replacing this line:

(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

by this:

import numpy as np# save np.loadnp_load_old = np.load# modify the default parameters of np.loadnp.load = lambda *a,**k: np_load_old(*a, allow_pickle=True, **k)# call load_data with allow_pickle implicitly set to true(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)# restore np.load for future normal usagenp.load = np_load_old


This issue is still up on keras git. I hope it gets solved as soon as possible. Until then, try downgrading your numpy version to 1.16.2. It seems to solve the problem.

!pip install numpy==1.16.1import numpy as np

This version of numpy has the default value of allow_pickle as True.


Following this issue on GitHub, the official solution is to edit the imdb.py file. This fix worked well for me without the need to downgrade numpy. Find the imdb.py file at tensorflow/python/keras/datasets/imdb.py (full path for me was: C:\Anaconda\Lib\site-packages\tensorflow\python\keras\datasets\imdb.py - other installs will be different) and change line 85 as per the diff:

-  with np.load(path) as f:+  with np.load(path, allow_pickle=True) as f:

The reason for the change is security to prevent the Python equivalent of an SQL injection in a pickled file. The change above will ONLY effect the imdb data and you therefore retain the security elsewhere (by not downgrading numpy).