본문 바로가기

전체보기205

Git Large File Storage(LFS) 사용하기 Git의 용량제한기본적으로 git은 여러개의 작은 파일들을 위한 버전 컨트롤 시스템(VCS)이다. 따라서 Github의 경우 50Mb부터 Warning이 표시되고, 100Mb부터는 Error가 발생한다. 그럼에도 불구하고 경우에 따라서 반드시 대용량 파일을 git repo에 포함시켜야하는 상황이 존재할 수 있다(예를 들면 학습된 모델파라미터 등). 이러한 경우에 사용할 수 있는 Git LFS(Large File Storage)의 사용법을 기록한다. 기본적인 사용방법은 모두 다음 블로그에서 가져왔다.https://leimao.github.io/blog/Git-Large-File-Storage/https://git-lfs.github.com/ Git LFS 설치하기curl -s https://packagec.. 2020. 3. 30.
CSV파일 인코딩(Encoding) CSV파일 인코딩(Encoding) 문제 해결하기 1. 현재 가지고 있는 csv파일에서 encoding이 무엇인지 알아내기 import chardet import pandas as pd filename = "Data_kr_v2.0.0_no_label_all_train3.csv" with open(filename, 'rb') as f: result = chardet.detect(f.readline()) # or read() if the file is small. print(result['encoding']) 이와 같은 방식으로 해당 라인의 encoding이 무엇인지 알아낼 수 있다. 2. Excel에서 csv 저장할 때 encoding변경하기 그런데 실제로 이렇게 옵션을 주고 해봐도, 제대로 encodin.. 2020. 3. 23.
On demand와 On the fly On demand: As soon as possible유저의 요청을 하면, 그 즉시 시작해서 최대한 빨리 return 해주는 시스템 On the fly: While in progress유저가 요청을 하면, 그 과정에서 멈추지 않고 무언가를 처리해서 return 해주는 시스템 https://ell.stackexchange.com/questions/140402/how-to-describe-the-difference-between-on-demand-and-on-the-fly ML에서의 예시On demand 전처리 : 유저가 학습 버튼을 클릭하면, 그 즉시 전체 데이터에 대한 전처리가 이뤄짐On the fly 전처리 : 유저가 학습 버튼을 클릭하면, 전체 데이터에 대한 전처리가 끝날 때까지 기다리지 않고 즉시(.. 2020. 3. 19.
Forward Looking Problem, Omniscient(Oracle) Forward Looking Problem기본적으로 time-series데이터를 이용한 future forecasting task에서는 절대적으로 미래의 정보가 예측 모델(함수)의 input으로 들어가는 것이 엄격히 금지된다.특히 금융 모델의 경우, 미래 주가를 validation셋으로 사용하고, 여기서 구한 단순 1차 통계(mean값)를 사용해 과거의 데이터인 training셋을 normalize하기 위해서 사용하는 것 만으로도 엄청난 문제가 된다. 그 정도로 future 정보는 엄격히 사용이 금지되어야 하는 것이 원칙적으로는 맞다. Time-series Cross-validation그래서 이러한 종류의 time-series forecasting하는 task에서 cross-validation을 할 때에.. 2020. 3. 16.
ML Python 프로젝트의 test code만들기 Test coverage for ML proejct머신러닝 프로젝트에 대해서도 공동 개발을 할 경우에는 pytest를 이용한 Test Coverage 측정이 필요하다. 그래서 test coverage를 대충 80%이상 통과해야 PR이 가능한 방식으로 협업을 해야한다.그런데 일반 서비스 프로젝트와 달리 ML은 GPU로 학습이 잘 되어서 성능이 원래대로 나오는지 까지 확인해야 아마 버그 없음을 증명할 수 있을텐데, 이렇게까지 하기에는 너무 엔지니어링과 계산량이 방대하고, 연구의 영역과 겹치게 된다. 그렇다고 일반 서비스 프로젝트 처럼 함수 단위로 input과 output을 체크하는 test는 ML코드에 있어서 역시나 너무 과한 오버 엔지니어링이다. 따라서 적절한 수준은 아마도 아주 작은 1 batch-siz.. 2020. 3. 16.
Python 설치 및 삭제하기 python을 src부터 빌드하는 것은 절대로 해서는 안될 짓이다. 컴파일이 굉장히 복잡하고 엄청나게 오래걸리며, 버전 변경또한 어렵기 때문이다. 무조건 pyenv를 쓰거나, apt-get도 별로 좋지 않다.(버전관리가 안됨). 가장 좋은 방법은 python을 conda로 설치해서 관리하는 것이다. 왜냐하면 conda는 완전한 동작을 보장하는 dependency로 설치해주기 때문이다. Conda를 이용해 Python 설치하기# 특정 버전의 Python 설치하기1) conda를 쓴다.- Conda: python을 위한 전용 virtualenv # miniconda 설치 방법wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh .. 2020. 2. 27.
Python subprocess와 Multi-process System Commandpython에서 command line으로 명령을 내리는 방법은 os.system()을 이용하는 방법과, subprocess를 이용하는 방법 두가지가 있다. 그러나 여러가지 이유로 os.system()보다는 subprocess를 이용하는 것이 훨씬 더 많은 기능을 제공하고, 더 권장되는 방법이다.https://stackoverflow.com/questions/89228/calling-an-external-command-from-python Python에서 Subprocess 사용하기 subprocess 명령어는 윈도우에서 커맨드라인 명령어를 System() 함수로 호출 하듯, 리눅스의 OS명령어를 파이썬에서 실행시키는 기능이다. from subprocess import Popen.. 2020. 2. 20.
Python에서 directory 관련 명령어 cp --parents 명령어 구현하기def make_safe_dir(dir): if not os.path.exists(dir): os.makedirs(dir) def remove_safe_dir(dir): if os.path.isfile(dir) or os.path.exists(dir): shutil.rmtree(dir) def cp_parents(cwd, full_file_path, tmpdir): dir_diff = full_file_path.replace(cwd, "").split("/")[1:-1] file_name = full_file_path.split("/")[-1] target_dir = "" if len(dir_diff): target_dir = os.path.join(*dir_diff.. 2020. 2. 19.
Python 코드 안에서 git과 pip 사용하기 Python 코드 안에서 pip install하기import sys import subprocess def pip_install(package): subprocess.check_call(["sudo", sys.executable, "-m", "pip", "install", package]) def pip_install_requirements(requirements_dir): subprocess.check_call(["sudo", sys.executable, "-m", "pip", "install", "-r", requirements_dir.rstrip(".txt")+".txt"]) https://stackoverflow.com/questions/12332975/installing-python-module.. 2020. 2. 19.
Advanced Python Scheduler Advanced Python Scheduler (APScheduler) Python으로 이뤄진 전처리나 ETL 을 주기적으로 실행해야하는 경우, dynamic task scheduler가 팔요하다. 이에 대한 선택지로는 Airflow나 dask, zenkins 등이 있으나, 매우 간단하게 single machine에서의 job scheduling으로는 좀 오버스팩이 아닐 수 없다. 이러한 경우에 APS를 사용하면 편리하다. 설치방법pip install apscheduler API문서https://apscheduler.readthedocs.io/en/stable/modules/schedulers/base.html#module-apscheduler.schedulers.base 간단한 예제from dateti.. 2020. 2. 18.
Airflow Airflow튜토리얼 에어플로우는 dask와 유사한 프로젝트로, 분산 환경에서의 python 자동 실행 스케줄러이다. 그런데 dask에서 더 나아가서 자동으로 지정된 시간과 조건에 따라 스크립트를 순차적으로 실행시켜주는 젠킨스(?) 와 같은기능도 한다. Airflow에 새로운 패키지 설치하기worker, scheduler, webserver 세군데에 모두 동일한 python 패키지를 설치해주어야만 에러가 나지 않는다. 실제 실행되는 환경은 worker이지만, scheduler와 webserver도 실행할 수 있어야 에러가 나지 않는다.(이는 dask와 동일한 부분) 그래서 requirements.txt를 생성해서 각각의 컨테이너에 전달하여 간단한 패키지는 쉽게 설치할 수 있다. 그러나 복잡한 설치를 요하.. 2020. 2. 11.
Black: Uncompromising Python Coding Convetion Black: Uncompromising Python Coding ConvetionPython의 coding convention에 따라서 강제로 현재의 소스코드를 reformatting 시켜주는 오픈소스프로젝트이다.Window에서 Pycharm anaconda 환경에서 setup하기pipi install blackC:\ProgramData\Anaconda3\Scripts\black.exe 경로 복사Pycharm에서 File-Setting-Tools-External Tools에서 추가버튼 누르고, 다음을 입력 Name: BlackDescription: Black is the uncompromising Python code formatter.Program: Arguments: "$FilePath$" 사용법: .. 2020. 2. 4.
Python 파일을 exe파일로 컴파일하기 Windows anaconda 환경에서 실행 방법(아나콘다에서)pip install auto-py-to-exeauto-py-to-exe.exe 를 윈도우에서 실행시킨다.(혹은 anaconda prompt에서 실행해도됨)아래와 같이 해당 python파일의 경로를 입력하고 conver를 누른다. https://pypi.org/project/auto-py-to-exe/ 2020. 2. 4.
Graph Neural Networks 0. Convolutional Neural Networks의 Graph 해석Karate club graph, colors denote communities obtained via modularity-based clustering (Brandes et al., 2008) 위와 같은 그래프 형태의 데이터를 학습하기 위한 가장 좋은 네트워크 아키텍쳐는 무엇일까? 바로 Graph Convolutional Networks이다. GCN은 널리 알려진 Convolutional Neural Networks에 Adjacency Matrix를 도입하여 보다 데이터의 structure를 보다 일반화된 형태의 그래프로 정의한 것이다. Adjacency Matrix란 아래와 같은 graph가 있을 때, 각 node간에 연결(e.. 2020. 1. 30.
작은 따옴표, 아포트트로피, 그레이브 악센트 구분 아포스트로피: I'll 같이 말을 생략하거나, Google's와 같은 소유격에 사용되는 특수문자.보통 작은따옴표를 사용한다.https://ko.wikipedia.org/wiki/%EC%95%84%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A1%9C%ED%94%BC Quote: 따옴표. 마찬가지로 작은따옴표나 큰따옴표를 사용한다.He said, "I can't swim." Grave Accent: 특정한 발음기호를 가진 알파벳을 나타낼 때 사용한다.ESC아래에 있는 ` 키로 입력한다. https://en.wikipedia.org/wiki/Grave_accent 2020. 1. 30.
다양한 Convolution Layer Convolution기본적으로 convolution layer는 fully connected layer에서 spatial(이미지의 가로세로) 영역을 잘게 쪼개고, 그만큼 weight sharing을 시킨 아키텍쳐이다.그러나 feature dimension(=channel, depth)에 대해서는 여전히 fully connected를 유지하고 있다. 즉 모든 input channel을 섞어서 각각의 output channel로 연결하는 과정이 fully connected라는 의미이다. 수식으로 말하자면 input channel이 256 dim이고 output channel이 128 dim이라면, feature dim에 대한 weight matrix는 [256x128]로 fully connected 이다. .. 2020. 1. 30.
Bayesian Inference Machine Learning 에서 궁극적으로 추구하는 목표는 P(X'|X) 를 알아내는 것이다. (X' : 예측하고자 하는 데이터 , X : 기존에 관측된 사건의 데이터) 즉, 기존에 관측된 사건의 데이터 X를 이용해서 앞으로 일어날사건 X'에 대해 예측하는 것이다.만일, X 없이 그냥 P(X')를 계산한다는 것은 기존에 일어난 사건 데이터 전혀 고려하지 않고, 오직 수학적 모델만으로 확류를 계산하겠다는 의미이다. 이는 machine learning이라 부를 수 없고, 일반적으로 데이터 X를 고려할 때보다 훨씬 부정확한 확률 추론을 하게된다. 좀 더 직관적인 예를 들면, 두개의 박스 A와 B에서, A에는 빨간공이 99%, B에는 파란공이 99% 들어 있다고 하자. 이때 한 사람이 무작위로 두 박스중 하.. 2020. 1. 29.
Advanced Supervised Learning Advanced Supervised Learning Active LearningUnlabeled data에 대해 MC dropout을 inference를해서 confidence를 측정해서 낮은것부터 labeling한다.똑같은 방법으로 loss prediction을 해서 loss가 큰 것부터 labeling할 수도 있다. Online Service Data + Active Learning감독학습 모델의 실서비스를 하면서 계속해서 들어오는 input x에 대해, 모든 데이터를 전부 labeling할 수는 없다. 따라서 이 중에서 어떤 데이터를 labeling할 지 우선순위를 정해야하는데 이 때 active learning이 필요하다. Multi-task Learning에서 난이도에 따른 Overfitting.. 2020. 1. 28.
Librosa, Numba 에러 해결 RuntimeError: cannot cache function '__jaccard': no locator available for file '/opt/conda/lib/python3.6/site-packages/librosa/util/matching.py'원인0.7이 넘어가는 librosa에서 numba cache를 사용하는데, numba cache dir에 대한 권한이 없어서 생기는 문제이다, https://github.com/numba/numba/issues/4032https://github.com/ska-sa/montblanc/issues/253 해결책: 다음 셋 중 하나로 해결가능1. numba_cache dir 생성mkdir /tmp/numba_cache & chmod 777 /tmp/numb.. 2020. 1. 23.
가장 효율적인 ML 프로젝트 개발 환경 / Sublime과 Pycharm 절대 규칙1. 무조건 editor가 아니라 IDE를 사용해야한다.pycharm을 쓸 때랑 sublimetext를 사용할 때의 생산성 차이는 압도적이다.(특히 refactor) 1. 무조건 local에서 바로 실행할 수 있어야한다.즉시 응답하는 빠른 run이 가능해야만 손쉽게 디버깅을 할 수 있다. local run은 단순히 pytorch cpu에서 실행해도 전혀 상관이 없다.서버에서 실행해야하는 경우도 가능하면 toy환경을 local로 가져오는 것이 좋고, 그마저도 힘들다면 sftp를 이용해서 remote의 코드를 pycharm으로 수정하도록 한다. 1. 내가 사용하는 환경을 docker로 한번 감싼다.그래야 다른 환경에 쉽게 옮길 수 있다. docker commit을 이용해서 현재 환경을 복사하면 되기.. 2020. 1. 17.