Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩테스트
- 데이터사이언티스트
- 랜덤포레스트
- 대학원
- 머신러닝
- 퀀트
- 경력기술서 첨삭
- 데이터사이언스
- 판다스
- 커리어전환
- 경력 기술서
- 하이퍼 파라미터 튜닝
- 파이썬
- 하이퍼 파라미터
- 퀀트 투자 책
- 베이지안 최적화
- 주가데이터
- 데이터분석
- 데이터 사이언스
- AutoML
- 파라미터 튜닝
- 데이터 사이언티스트
- 주요 파라미터
- 주식데이터
- 자기소개서
- pandas
- 이력서 첨삭
- 사이킷런
- sklearn
- 데이터사이언스학과
Archives
- Today
- Total
GIL's LAB
파이썬 인스턴스 (AI 모델 포함) 크기 측정 방법 본문
파이썬 인스턴스 크기는 sys.getsizeof를 이용하여 측정할 수 있습니다.
크기가 100과 1000000인 난수 배열의 크기를 측정해보겠습니다.
먼저 난수 배열을 다음과 같이 생성합니다.
import numpy as np
small_arr = np.random.random(100)
large_arr = np.random.random(1000000)
다음으로 크기를 측정합니다.
print(sys.getsizeof(small_arr))
print(sys.getsizeof(large_arr))
[실행 결과]
896
8000096
크기가 잘 측정되는 것으로 보입니다.
그럼 머신러닝 모델의 인스턴스도 잘 측정되는지 보겠습니다.
먼저 5개의 트리로 구성된 작은 랜덤포레스트 모델과 100개 트리로 구성된 큰 랜덤포레스트 모델을 학습합니다.
from sklearn.ensemble import RandomForestRegressor as RFR
X = np.random.random((100, 10))
Y = np.random.random(100)
small_model = RFR(5).fit(X, Y)
large_model = RFR(100).fit(X, Y)
아까와 같은 방법으로 크기를 측정해보겠습니다.
print(sys.getsizeof(small_model))
print(sys.getsizeof(large_model))
[실행 결과]
48
48
당연히 large_model이 더 커야하지만 그렇지 않게 나옵니다. 또, 앙상블 모델이 크기 100짜리 배열보다 가볍다는게 잘 이해가 가지 않습니다. 그 이유는 sys.getsizeof는 내장 자료형에 대해서만 잘 작동하기 때문입니다.
어느 상황에서도 쓰려면 아래 함수가 적절합니다.
import sys
from types import ModuleType, FunctionType
from gc import get_referents
def getsize(obj):
BLACKLIST = type, ModuleType, FunctionType
seen_ids = set()
size = 0
objects = [obj]
while objects:
need_referents = []
for obj in objects:
if not isinstance(obj, BLACKLIST) and id(obj) not in seen_ids:
seen_ids.add(id(obj))
size += sys.getsizeof(obj)
need_referents.append(obj)
objects = get_referents(*need_referents)
return size
다시 모델의 크기를 측정해보겠습니다.
print(getsize(small_model))
print(getsize(large_model))
[실행 결과]
4934
45138
이번엔 잘 나온 것으로 보입니다.
배열 크기도 측정해보겠습니다.
print(sys.getsizeof(small_arr))
print(sys.getsizeof(large_arr))
[실행 결과]
896
8000096
정리하자면, getsize 함수를 위와 같이 만들어서 사용하는 것이 좋습니다.
'파이썬 > 파이썬 활용 팁' 카테고리의 다른 글
문자열 분리하기 (0) | 2023.08.09 |
---|---|
str.findall: 특정 단어가 포함되었는지를 확인 (0) | 2022.12.28 |
list comprehension의 효율성 검증 실험 (0) | 2022.11.26 |
모듈에서 파일 불러오기: pkg_resources.resource_filename (0) | 2021.12.16 |
Comments