【发布时间】:2019-09-17 08:05:54
【问题描述】:
我正在尝试使用 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
【问题讨论】:
-
这个错误是什么意思?
-
@CharlieParker 显然在 numpy.load() 函数中添加了一个参数。以前是
np.load(path),现在是np.load(path, boolean)默认情况下,布尔值 (allow_pickle) 为 false -
谢谢!但这是否意味着 numpy 现在在保存时未经我的许可为我腌制东西?!诡异的!我查看了
np.savez文档,但没有提到酸洗,所以我不知道它是如何一开始就知道我保存的东西是 Pytorch 的东西,而不仅仅是 numpy ......奇怪!如果您知道发生了什么,请与我们分享 :) -
在遇到同样的问题后,我认为这完全取决于您要保存到 .npz 的 什么。如果您要保存内置类型,则无需酸洗。但是,如果您编写一个对象,python/numpy 将腌制它(即序列化它)。我想这会带来安全风险,因此后来的 numpy 版本不再允许它成为默认值......不过只是一种预感。