keras.datasets.imdb.load_data() に 'Object arrays cannot be loaded when allow_pickle=False' で失敗する.
Tensorflow tutorials の「映画レビューのテキスト分類」(https://www.tensorflow.org/tutorials/keras/basic_text_classification) にて、データセットのロードに失敗します。
In [6]: from keras.datasets import imdb In [7]: (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-7-7d41db3a3caa> in <module> ----> 1 imdb.load_data(num_words=10) /anaconda3/envs/py36_base/lib/python3.6/site-packages/tensorflow/python/keras/datasets/imdb.py in load_data(path, num_words, skip_top, maxlen, seed, start_char, oov_char, index_from, **kwargs) 84 file_hash='599dadb1135973df5b59232a0e9a887c') 85 with np.load(path) as f: ---> 86 x_train, labels_train = f['x_train'], f['y_train'] 87 x_test, labels_test = f['x_test'], f['y_test'] 88 /anaconda3/envs/py36_base/lib/python3.6/site-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) /anaconda3/envs/py36_base/lib/python3.6/site-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
これは numpy のバージョンに依存するエラーで、numpy=1.16.3 から、read_array(fp, allow_pickle, pickle_kwargs) の allow_pickle のデフォルト値が False に変更されたことに起因しています。
$ conda list ... numpy 1.16.3 py36hacdab7b_0 numpy-base 1.16.3 py36h6575580_0 ...
ここで示される解決方法は単純に numpy=1.16.2 にダウングレードすることです。
$ conda install numpy=1.16.2 $ conda list | grep numpy ... numpy 1.16.2 numpy-base 1.16.2 ...
動作を確認しました。
In [5]: imdb.load_data(num_words=1) Out[5]: ((array([list([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ...
ちなみに、colab では以下のコードが挿入されており、tf のバージョンを変えることで対応しています。 nightly build では修正されているようですので次のバージョンでは解消されるはずです。
# keras.datasets.imdb is broken in 1.13 and 1.14, by np 1.16.3 # (nightly build は最新バージョンのビルド) !pip install tf_nightly