venv는 내부적으로 어떻게 작동할까?
·
Python
Python의 모듈 간 의존성 문제를 해결하기 위해서 virtualenv나 venv를 많이 사용하실 겁니다. 시스템에 설치된 모듈들과 virtual environment 내에 설치된 모듈들을 분리해주기 때문에 모듈들이 꼬일 걱정 없이 사용할 수 있어서 참 좋습니다. 개인적으로 저는 새 Python 프로젝트를 시작하면 venv와 git 초기화를 꼭 실행합니다. 그런데 가끔 내부적으로 어떻게 이 기능이 작동하는지 궁금할 때가 있습니다. 그래서 오늘은 venv가 어떻게 작동하는지 한번 알아보겠습니다. (virtualenv도 작동 방식은 거의 동일합니다.) 1. venv를 만들자 먼저 아래 명령으로 virtual environment를 만듭니다. python3 -m venv env 그럼 현재 디렉터리에 env ..
bad magic number in 'application': b'\x03\xf3\r\n': ImportError
·
Python
자주 겪는 문제는 아니지만 종종 python에서 bad magic number in 'application': b'\x03\xf3\r\n': ImportError가 날 때가 있습니다. 이 에러는 python 2.x 대 버전으로 만들어진 *.pyc 파일을 python 3.x 대 버전으로 실행시키려고 할 때 발생합니다. "python main.py" 명령으로 main.py를 실행시킴. main.py는 다른 모듈들을 import 함. python 명령은 python 2.x 버전이고, 이 과정에에서 python 2.x 대에 맞는 *.pyc 파일들이 생성됨 python 2.x가 아닌 python 3.x를 써야했다는 생각이 떠올라서 "python3 main.py" 명령으로 다시 main.py를 실행시킴 bad ma..
알쏭달쏭 Python import - sys.path
·
Python
Python으로 만들고 있는 프로그램이 커지기 시작하면 모듈화를 합니다. 이 기능, 저 기능을 모아서 하나의 파일로 합쳐서 모듈(*.py)로 만들지요. 모든 모듈들이 한 디렉터리에 있을 때는 아무 문제없이 행복합니다. 그러다가 조금 더 프로그램이 커지면 모듈들을 모아서 패키지(디렉터리)로 만들고 슬슬 문제가 시작됩니다. 멀쩡히 import 되던 모듈들이 찾을 수 없다며 import가 되지 않거나 , 엉뚱하게 동작하는 일들이 생기죠. 이것이 다 python의 sys.path 때문입니다. 1. sys.path 누구냐 넌 sys.path는 모듈을 import 할 때 모듈을 찾아야할 경로들을 저장해둔 list입니다. 예를 들어 sys.path가 ['directory_A', 'directory_B', 'direc..
CategoricalCrossentropy vs SparseCategoricalCrossentropy
·
Deep Learning
Tensorflow는 classification task에서 간편하게 사용할 수 있는 cross entropy loss 함수를 제공하고 있습니다. Binary classification이라면 BinaryCrossentropy를 사용하면 되고, Multi-class classification이면 CategoricalCrossentropy를 사용하면 됩니다. 그런데 API를 보면 비슷하게 생긴 SparseCategoricalCrossentropy라는 녀석도 있습니다. 차이가 뭘까요? 결론부터 말씀드리면, 훈련 데이터의 label(target)이 one-hot vector 이면 CategoricalCrossentropy 훈련 데이터의 label(target)이 정수이면 SparseCategoricalCross..
함수의 인자를 특정 값으로 고정하기 - functools.partial
·
Python
일반적으로 쓸 일이 많지는 않지만, 함수를 higher-order function 형태 (lambda, decorator 등 함수 자체를 하나의 객체로 취급하는 경우)로 쓰다 보면, 기존 함수를 재활용하는 경우가 왕왕 있습니다. 한 가지 예는 기존 함수의 특정 인자를 특정값으로 고정시키는 경우죠. 예를 들어, 아래와 같은 코드를 보겠습니다. def print_characters(char, repeat): print(char * repeat) print_characters('*', 10) ********** 별을 10개가 아니라 20개를 출력하고 싶다면? print_characters('*', 20) 그런데 왜인지 무조건 별을 20개 출력하는 함수를 만들고 싶어졌습니다. def print_character..
대용량 훈련 데이터 처리 - Generator로 TF Dataset 만들기
·
Deep Learning
1. 너무 큰 데이터 tf.data.Dataset는 Tensorflow의 훈련 데이터를 다룰 때 참 편리합니다. Padding, Batch, Shuffle, Map 등을 다 지원해주니까요. 일단 데이터를 Dataset으로 변환만 시키면 그다음부터는 아주 편리하게 사용할 수 있습니다. from_tensor_slices를 쓰면 numpy array를 바로 Dataset으로 변환해주니까 더할나위 없이 편리하고요. 하지만! 이 방법에는 치명적인 문제가 있으니... 바로 변환하려는 전체 데이터가 메모리에 올릴 수 있는 크기여야 한다는 겁니다. 물론 가상 메모리를 써서 메모리를 가짜로 늘릴 수는 있지만 이 순간부터 Thrashing으로 속도가 급격하게 떨어지고, Out-of-memory로 죽기도 합니다. 이 문제가..