Google Colab 에서 IMDb 데이터 세트를 사용하여 이진 분류 예제를 구현하려고합니다 . 이전에이 모델을 구현했습니다. 그러나 며칠 후 다시 시도했을 때 load_data () 함수에 대해 ‘allow_pickle = False 일 때 개체 배열을로드 할 수 없습니다’라는 값 오류가 반환되었습니다.
: 난 이미 비슷한 문제에 대한 기존 응답 언급,이 문제를 해결하는 시도 어떻게 해결하는 sketch_rnn 알고리즘 ‘allow_pickle이 False = 때 개체 배열을로드 할 수 없습니다’
그러나 단지 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
답변
다음 imdb.load_data
은 노트북에서이 줄을 대체하여 피클 을 강제 로 허용 하는 방법입니다 .
(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
답변
이 문제는 여전히 keras git에 있습니다. 가능한 한 빨리 해결되기를 바랍니다. 그때까지 numpy 버전을 1.16.2로 다운 그레이드 해보세요. 문제를 해결하는 것 같습니다.
!pip install numpy==1.16.1
import numpy as np
이 numpy 버전의 기본값 allow_pickle
은 True
.
답변
GitHub 에서이 문제 에 이어 공식적인 해결책은 imdb.py 파일을 편집하는 것입니다. 이 수정은 numpy를 다운 그레이드하지 않고도 잘 작동했습니다. imdb.py 파일을 찾아서 tensorflow/python/keras/datasets/imdb.py
(전체 경로 : C:\Anaconda\Lib\site-packages\tensorflow\python\keras\datasets\imdb.py
-다른 설치는 다를 수 있음) diff에 따라 85 행을 변경하십시오.
- with np.load(path) as f:
+ with np.load(path, allow_pickle=True) as f:
변경 이유는 피클 파일에 SQL 주입에 해당하는 Python을 방지하기위한 보안입니다. 위의 변경 사항은 imdb 데이터에만 영향을 미치므로 다른 곳에서 보안을 유지합니다 (numpy를 다운 그레이드하지 않음).
답변
방금 allow_pickle = True를 np.load ()에 대한 인수로 사용했으며 저에게 효과적이었습니다.
답변
제 경우에는 다음과 같이 일했습니다.
np.load(path, allow_pickle=True)
답변
cheez ( https://stackoverflow.com/users/122933/cheez ) 의 답변 이 가장 쉽고 효과적인 답변이라고 생각합니다 . 전체 세션 기간 동안 numpy 함수를 수정하지 않도록 조금 더 자세히 설명하겠습니다.
내 제안은 다음과 같습니다. 동일한 종류의 오류를 보여주는 keras에서 reuters 데이터 세트를 다운로드하는 데 사용하고 있습니다.
old = np.load
np.load = lambda *a,**k: old(*a,**k,allow_pickle=True)
from keras.datasets import reuters
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=10000)
np.load = old
del(old)
답변
플래그의 값을 변경해 볼 수 있습니다.
np.load(training_image_names_array,allow_pickle=True)