최대 1 분 소요

딥러닝 학습중에 학습을 하면 모델, 가중치를 저장을 하거나 이미 저장되어있는걸 불러오기도 한다.

이럴때 주로 사용하는것이 pkl이다. 앞서 설명했던 numpy나 tensor를 npy확장자로 저장한것과 유사하다.

특징으로는 serialize(직렬화)가 가능한 방식중에 하나로 JSON, YAML과 같이 가독성이 우수한 방법도 있으나 Pickle은 효율적이라는 장점이있다. 대부분의 모델과 같은경우 dictionary 자료형으로 주로 저장을 하곤한다. 물론 데이터 또한 그렇게 저장하기도 하는데 전자의 경우가 더 많다.

필자의 경우 pandas의 dataframe만으로 데이터를 처리하려 하다가 방대한 경우에 컴퓨터가 감당하지 못하는것과 numpy형태로 담을경우에도 컴퓨터가 감당하지 못하는것을 겪으며 dictionary의 중요함을 깨달았다.

각설하고 어떻게 저장하며 어떻게 불러오는지에 대해 말해보고자 한다.

#먼저 pickle 라이브러리를 불러온다 
import pickle

이후 임의의 dictionary 자료형의 데이터가 있다고 가정해볼 때

price = {'apple': 10, 'banana':12, 'fish': 20}

아, 약간의 dictionary에 대해 설명하자면 사전과 같이 key값과 value값으로 쌍으로 존재한다.

key 값을 통해 value얻기

price['apple']
>>> 10

새로운 값 추가하기

price['mango'] = 30
print(price)
>>>{'apple': 10, 'banana': 12, 'fish': 20, 'mango': 30}

값 삭제하기(del)

del price['banana']
print(price)
>>>{'apple': 10, 'fish': 20, 'mango': 30}

키값을 통해 값을 추가하고 삭제할 수 있어서 간편하다. 너무 기초적인 부분이라 짧게만 설명하겠다.

본론으로 돌아가서 이러한 dictionary 를 pkl형태로 저장을 할 때에

저장

import pickle

with open('원하는위치/원하는이름.pkl', 'wb') as f:
    pickle.dump('dictionary이름', f)
  

불러오기

with open('원하는위치/원하는이름.pkl','rb') as f:
    pickle_load = pickle.load(f)

이렇게 사용하면 된다.