如何修复 imdb.load_data() 函数的“当 allow_pickle=False 时无法加载对象数组”?

新手上路,请多包涵

我正在尝试使用 Google Colab 中的 IMDb 数据集实现二进制分类示例。我以前实现过这个模型。但是当我几天后再次尝试时,它为 load_data() 函数返回了一个 value error: 'Object arrays cannot be loaded when allow_pickle=False'

我已经尝试解决这个问题,参考类似问题的现有答案: How to fix ‘Object arrays cannot be loaded when allow_pickle=False’ in the sketch_rnn algorithm 。但事实证明,仅仅添加一个 allow_pickle 参数是不够的。

我的代码:

 from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

错误:

 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

原文由 Kanad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 828
2 个回答

这是一个强制 imdb.load_data 允许 pickle 的技巧,在你的笔记本中,替换这一行:

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

这样:

 import numpy as np
# save np.load
np_load_old = np.load

# modify the default parameters of np.load
np.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 usage
np.load = np_load_old

原文由 Sohail 发布,翻译遵循 CC BY-SA 4.0 许可协议

这个问题仍然存在于 keras git 上。我希望它能尽快得到解决。在那之前,请尝试将您的 numpy 版本降级到 1.16.2。它似乎解决了问题。

 !pip install numpy==1.16.1
import numpy as np

此版本的 numpy 的默认值为 allow_pickleTrue

原文由 Tirth Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题