Я пытаюсь реализовать пример двоичной классификации, используя набор данных IMDb в Google Colab . Я уже реализовал эту модель раньше. Но когда я попытался сделать это снова через несколько дней, он вернул ошибку значения: «Массивы объектов не могут быть загружены, когда allow_pickle = False» для функции load_data ().
Я уже пробовал решить эту проблему, ссылаясь на существующий ответ для аналогичной проблемы: Как исправить «Массивы объектов не могут быть загружены, когда allow_pickle = False» в алгоритме sketch_rnn. Но оказалось, что простого добавления аргумента 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
np.load(path)
, теперь поnp.load(path, boolean)
умолчанию логическое значение (allow_pickle) равно falsenp.savez
документы, но там не было упоминания о мариновании, поэтому я понятия не имею, как он вообще знал, что вещи, которые я сохранял, были материалом Pytorch, а не только numpy ... странно! Если вы знаете, что происходит, поделитесь с нами :)Ответы:
Вот трюк,
imdb.load_data
позволяющий разрешить рассол в блокноте, заменив эту строку:этим:
источник
TypeError: <lambda>() got multiple values for keyword argument 'allow_pickle'
Эта проблема все еще актуальна для keras git. Я надеюсь, что проблема будет решена как можно скорее. А пока попробуйте понизить свою версию numpy до 1.16.2. Вроде решает проблему.
Эта версия numpy имеет значение по умолчанию
allow_pickle
asTrue
.источник
После этой проблемы на GitHub официальное решение - отредактировать файл imdb.py. Это исправление сработало для меня без необходимости понижать версию numpy. Найдите файл imdb.py по адресу
tensorflow/python/keras/datasets/imdb.py
(полный путь для меня был:C:\Anaconda\Lib\site-packages\tensorflow\python\keras\datasets\imdb.py
- другие установки будут другими) и измените строку 85 в соответствии с diff:Причина изменения - безопасность для предотвращения Python-эквивалента SQL-инъекции в маринованный файл. Приведенное выше изменение повлияет ТОЛЬКО на данные imdb, и поэтому вы сохраните безопасность в другом месте (не понижая numpy).
источник
Я просто использовал allow_pickle = True в качестве аргумента для np.load (), и у меня это сработало.
источник
В моем случае работал с:
источник
Я думаю, что ответ от cheez ( https://stackoverflow.com/users/122933/cheez ) - самый простой и эффективный. Я бы немного уточнил его, чтобы он не изменял функцию numpy на весь период сеанса.
Мое предложение ниже. Я использую его для загрузки набора данных reuters из keras, который показывает такую же ошибку:
источник
Вы можете попробовать изменить значение флага
источник
Ни одно из перечисленных выше решений у меня не помогло: я запускаю anaconda с python 3.7.3. Для меня сработало
запустите "conda install numpy == 1.16.1" из Anaconda powershell
закройте и снова откройте блокнот
источник
allow_pickle=True
значение по умолчанию.на ноутбуке jupyter с использованием
работал нормально, но проблема возникает, когда вы используете этот метод в spyder (вам нужно перезапускать ядро каждый раз, иначе вы получите ошибку вроде:
Я решил эту проблему, используя решение здесь :
источник
Я приземлился здесь, попробовал ваши пути и не мог понять.
На самом деле я работал над заранее заданным кодом, в котором
был использован, поэтому я заменил его на
источник
Да, установка предыдущей версии numpy решила проблему.
Для тех, кто использует PyCharm IDE:
в моей IDE (Pycharm), File-> Settings-> Project Interpreter: я обнаружил, что мой numpy равен 1.16.3, поэтому я вернулся к 1.16.1. Нажмите + и введите numpy в поиске, отметьте «указать версию»: 1.16.1 и выберите -> установить пакет.
источник
найдите путь к imdb.py, затем просто добавьте флаг в np.load (путь, ... флаг ...)
источник
Это работа для меня
источник
Я обнаружил, что TensorFlow 2.0 (я использую 2.0.0-alpha0) несовместим с последней версией Numpy, т.е. v1.17.0 (и, возможно, v1.16.5 +). Как только TF2 импортируется, он выдает огромный список FutureWarning, который выглядит примерно так:
Это также привело к ошибке allow_pickle при попытке загрузить набор данных imdb из keras
Я попытался использовать следующее решение, которое отлично работало, но мне приходилось делать это в каждом отдельном проекте, в котором я импортировал TF2 или tf.keras.
Самым простым решением, которое я нашел, было либо установить numpy 1.16.1 глобально, либо использовать совместимые версии tensorflow и numpy в виртуальной среде.
Моя цель в этом ответе - указать, что это не просто проблема с imdb.load_data, а более серьезная проблема, вызванная несовместимостью версий TF2 и Numpy, и может привести к множеству других скрытых ошибок или проблем.
источник
У Tensorflow есть исправление в версии tf-nightly.
Текущая версия - 2.0.0-dev20190511.
источник
Ответ @cheez когда - то не работает и рекурсивно вызвать функцию снова и снова. Чтобы решить эту проблему, вы должны глубоко скопировать функцию. Вы можете сделать это с помощью функции
partial
, поэтому окончательный код:источник
Обычно я не публикую такие сообщения, но это меня очень раздражало. Путаница возникает из-за того, что некоторые
imdb.py
файлы Keras уже обновлены:к версии с
allow_pickle=True
. Обязательно проверьте файл imdb.py, чтобы увидеть, было ли это изменение уже реализовано. Если это было отрегулировано, следующее работает нормально:источник
Самый простой способ изменить
imdb.py
настройки ,allow_pickle=True
чтобыnp.load
в строке , гдеimdb.py
кидает ошибку.источник