"Object 배열은 allow_pickle=False일 때 로드할 수 없습니다" 오류 해결 방법
keras.datasets.imdb.load_data()
함수를 사용하여 IMDB 데이터 세트를 로드하려고 할 때 다음과 같은 오류가 발생할 수 있습니다.
ValueError: Object arrays cannot be loaded when allow_pickle=False
원인:
넘파이 1.16.3 버전부터 np.load()
함수의 기본값으로 allow_pickle
매개변수가 False
로 설정되었습니다. imdb.load_data()
함수는 내부적으로 np.load()
함수를 사용하여 pickle로 저장된 데이터를 읽기 때문에 이 오류가 발생합니다.
해결 방법:
다음 방법 중 하나를 사용하여 오류를 해결할 수 있습니다.
넘파이 버전 1.16.3 이전 버전 사용:
가장 간단한 방법은 넘파이 버전을 1.16.3 이전 버전으로 낮추는 것입니다. 다음 명령어를 사용하여 넘파이 1.16.1 버전을 설치할 수 있습니다.
conda install numpy==1.16.1
allow_pickle 매개변수 설정:
imdb.load_data()
함수를 호출할 때 allow_pickle
매개변수를 True
로 설정하면 오류를 해결할 수 있습니다.
(x_train, y_train), (x_test, y_test) = imdb.load_data(allow_pickle=True)
imdb.py 파일 수정:
imdb.py
파일을 직접 수정하여 np.load()
함수 호출에 allow_pickle=True
매개변수를 추가할 수 있습니다.
pickle 모듈 사용:
imdb.load_data()
함수 대신 pickle
모듈을 사용하여 직접 데이터를 로드할 수 있습니다.
import pickle
with open('imdb.pkl', 'rb') as f:
(x_train, y_train), (x_test, y_test) = pickle.load(f)
참고:
- 넘파이 1.17 버전부터
allow_pickle
매개변수의 기본값이 다시True
로 변경되었습니다. imdb.load_data()
함수는 Keras 2.2.4 버전부터 pickle 대신 HDF5 형식으로 데이터를 저장합니다.
예제 코드
import keras
# 1. 넘파이 버전 1.16.3 이전 버전 사용
# conda install numpy==1.16.1
(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data()
# 2. `allow_pickle` 매개변수 설정
(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(allow_pickle=True)
# 3. `imdb.py` 파일 수정
# imdb.py 파일에서 다음 코드를 찾습니다.
# with open(os.path.join(path, 'imdb.pkl'), 'rb') as f:
# (x_train, y_train), (x_test, y_test) = pickle.load(f)
# 다음 코드로 변경합니다.
# with open(os.path.join(path, 'imdb.pkl'), 'rb') as f:
# (x_train, y_train), (x_test, y_test) = pickle.load(f, allow_pickle=True)
# 4. `pickle` 모듈 사용
import pickle
with open('imdb.pkl', 'rb') as f:
(x_train, y_train), (x_test, y_test) = pickle.load(f)
- 위 코드는 예시이며, 사용 환경에 따라 수정해야 할 수도 있습니다.
imdb.pkl
파일은 Keras 데이터 세트에 포함되어 있습니다.
대체 방법
keras.datasets.imdb
대신 tensorflow_datasets
라이브러리를 사용하여 IMDB 데이터 세트를 로드할 수 있습니다.
import tensorflow_datasets as tfds
(x_train, y_train), (x_test, y_test) = tfds.load('imdb_reviews', split=['train', 'test'])
Hugging Face Transformers 사용:
Hugging Face Transformers
라이브러리를 사용하여 IMDB 데이터 세트를 로드할 수 있습니다.
from transformers import AutoDataset
dataset = AutoDataset.from_dataset('imdb')
x_train = dataset['train']['text']
y_train = dataset['train']['label']
x_test = dataset['test']['text']
y_test = dataset['test']['label']
직접 데이터 수집 및 전처리:
Kaggle 또는 인터넷에서 다른 출처에서 IMDB 데이터를 직접 수집하고 전처리할 수 있습니다.
- TensorFlow Datasets 및 Hugging Face Transformers는 더 많은 데이터 세트를 지원합니다.
- 직접 데이터를 수집하고 전처리는 더 많은 시간과 노력이 필요합니다.
python numpy keras