Как исправить 'Объектные массивы не могут быть загружены, когда allow_pickle = False' в алгоритме sketch_rnn - PullRequest
7 голосов
/ 24 апреля 2019

Я выполнял sketch_rnn.ipynb на своем ноутбуке jupyter, при загрузке среды для загрузки обученного набора данных он выдал ошибку «Объектные массивы не могут быть загружены, когда allow_pickle = False»

Этот код уже использовался разработчиками Google при разработке алгоритма sketch_rnn, который даже запускался в Google Colab. В прошлом я сам запускал его на Google Colab, он работал, но, похоже, не работает на моем ноутбуке Jupyter

from magenta.models.sketch_rnn.sketch_rnn_train import *
from magenta.models.sketch_rnn.model import *
from magenta.models.sketch_rnn.utils import *
from magenta.models.sketch_rnn.rnn import * 

model_params.batch_size = 1
eval_model_params = sketch_rnn_model.copy_hparams(model_params)
eval_model_params.use_input_dropout = 0
eval_model_params.use_recurrent_dropout = 0
eval_model_params.use_output_dropout = 0
eval_model_params.is_training = 0
sample_model_params = sketch_rnn_model.copy_hparams(eval_model_params)
sample_model_params.max_seq_len = 1
return [model_params, eval_model_params, sample_model_params]


[train_set, valid_set, test_set, hps_model, eval_hps_model, 
sample_hps_model] = load_env_compatible(data_dir, model_dir)

я ожидал, что результат будет

INFO:tensorflow:Downloading http://github.com/hardmaru/sketch-rnn- 
datasets/raw/master/aaron_sheep/aaron_sheep.npz
INFO:tensorflow:Loaded 7400/300/300 from aaron_sheep.npz
INFO:tensorflow:Dataset combined: 8000 (7400/300/300), avg len 125
INFO:tensorflow:model_params.max_seq_len 250.
total images <= max_seq_len is 7400
total images <= max_seq_len is 300
total images <= max_seq_len is 300
INFO:tensorflow:normalizing_scale_factor 18.5198.

Но это дало мне

ValueError: Object arrays cannot be loaded when allow_pickle=False

Ответы [ 3 ]

7 голосов
/ 26 апреля 2019

Этот код решил проблему на моей стороне.

# Downgrate numpy to fix a problem
!pip install numpy==1.16.2
import numpy as np
print(np.__version__)

Я просто понизил рейтинг, потому что проблема связана с внутренним конфликтом.

5 голосов
/ 24 апреля 2019

Так что я считаю, что это только что появилось из-за изменения numpy на load (), если вы наблюдаете строку, в которой возникает ошибка, она ссылается на что-то вроде

    with np.load(path) as f:
        x_train, labels_train = f['x_train'], f['y_train']
        x_test, labels_test = f['x_test'], f['y_test']

но исходный код Keras, например, здесь, в строке 58: https://github.com/keras-team/keras/blob/master/keras/datasets/imdb.py

теперь использует

    with np.load(path, allow_pickle=True) as f:
        x_train, labels_train = f['x_train'], f['y_train']
        x_test, labels_test = f['x_test'], f['y_test']

, где np.load(path) становится np.load(path, boolean)

Из краткого прочтения добавление pickles связано с безопасностью, поскольку pickles может содержать произвольный код Python, который будет запускаться при загрузке чего-либо. (Возможно, аналогично тому, как выполняются SQL-инъекции)

После обновления np.load новым списком параметров он работает для моего проекта

0 голосов
/ 21 мая 2019

Используйте allow_pickle = True в качестве одного из аргументов для np.load ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...