Python: 75개의 글
가상환경을 사용하는 이유 "독립적인 작업환경에서 작업이 가능하다" 프로젝트를 진행하다보면 여러 라이브러리와 패키지를 다운받아서 사용할 경우에 의존성에 문제가 생겨 충돌이 되는 경우가 생기게 된다. 또는 특정 라이브러리는 하위 버전만 지원하는 경우가 있다. 이러한 경우에는 버전을 여러개 그리고 독립적인 작업환경을 구성할 수 있는 venv 환경을 이용함으로써 해결할 수 있다. 먼저 파이썬에는 프로젝트별로 독립된 가상 환경을 만들어주는 virtualenv 라는 툴이 있다. 이를 설치하여 가상환경을 구성할 수 있다. (가상환경을 구성하기 전에 python 설치는 선행되어야 한다.) 가상환경을 위한 virtualenv 설치 $ sudo pip install virtualenv venv 생성하기 $ virtuale..
overview tensorflow는 graphs의 형태로 나타내는 프로그래밍 시스템을 말합니다. 그래프에 있는 노드들은 operations이라고 불리우는데, 줄여서 ops라고 칭합니다. op는 Tensor로 이루어져 있고, tensors간에 computaiton을 수행하게 됩니다. tensor는 multi-dimentional array형태로 되어있다. Tensorflow graph를 연산하기 위해서는 Session을 launch를 해야한다. Session은 Devices(CPUs, GPUs)위에서 연산을 실행한 후에 결과를 반환한다. The computation graph Tensorflow 프로그램은 graph의 형태로 되어 있고, 그래프에 있는 ops의 연산을 수행하기 위해 session을 이용한..
modern object recognition models은 수백만개의 파라미터의 값과 full train을 하는데 걸리는 시간이 주 단위로 걸리게 된다. Transfer learning은 여러개의 categories로 이루어진 set을 fully-trained model인 ImageNet을 대상으로, 새로운 클래스를 추가해서 기존에 존재하는 weights를 다시 retrain하는 것을 말한다. 요약해서 말하면, 이미 트레이닝이 된 모델의 수백만개의 parameters를 그대로 사용하는데, 새로운 클래스를 추가하므로서, 기존 weights를 retrain하는 것을 Transfer learning이라고 한다. 예를 들어서 마지막 final layer를 retraining하고, 그 나머지 모든 layer에 ..
네트워크를 구성하고, training을 하는데, accuracy와 cross-entropy의 그래프에서 training, validation의 값이 차이가 나는게 보였다. 빨간색이 training, 파란색이 validation이다. training의 acc의 값은 증가하고, cross-entropy의 값은 계속 줄어드는데 반면, validation의 값은 반대로 유지가 되거나, 반대로 증감하는 그래프를 확인할 수 있었다. 즉 현재 네트워크는 overfitting 되었다고 말할 수 있다. Dropout tensorflow에서는 fully connected layer를 일정 노드를 dropout을 함으로써, overfitting문제를 해결한다. input으로는 neuron’s을 유지할 probability를..
파이썬에서 데이터를 읽을때, 보통은 모든 데이터를 메모리에 올리고 사용하는 경우가 많다. 하지만, 작은 사이즈의 데이터는 가능하지만 큰 사이즈의 데이터를 메모리에 올리고 사용하는게 가능하다면? 피시에 감사하자. 큰 데이터셋을 사용하는 경우인 데이터 학습 시킬 학습 데이터, 통계를 낼때 데이터 등등.. 이때는 데이터를 built-in 함수인 iterator, generator를 이용을 해야만 한다. MUST!! Iterator, Generator 자 interation을 어떻게 쓰는게 좋은가? python for x in range(10): print x range(10)은 리스트를 생성하는것과 동일하다. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] list를 iteration object로 생..
쥬피터(Jupyter) Notebook에서 Slack 메시지를 보내는 방법 데이터 분석일을 하다보니 작업을 돌려놓고, 다른 업무를 보는 일이 많다. 여러개를 병렬적으로 돌려야 하다보니, 언제 어떤 작업이 완료했는지 알람을 받는게 필요했다. 일단 단계는 4단계로 크게 나누어 봤다. sendlogto_slack 의 python 코드 작성 sendlogto_slack을 bashrc에 alias로 지정 ipython에서 alias를 추가하는 부분 코드 작성 및 startup 스크립트 작성 ipython에서 alias로 메시지보내기 사용 sendlogto_slack 파이썬 코드 작성하기 # -*- encoding: utf8 -*- def send_log_to_slack(text): channel = '' impo..
파이썬에서 pickle을 이용해 dictionary를 저장하고 로드하는 방법 중간 결과를 저장하거나, 최정 결과를 저장하기 위해 dictionary의 객체를 그대로 로컬의 디스크로 저장하는 방법은 자주 필요하다. key, map을 만드는 경우에도 중간 데이터를 생성해 놓은 뒤에, 이미 데이터가 있는 경우에는 로드해서 바로 사용하면 효율적이다. 코드 pickle을 이용해 데이터의 사이즈를 줄이고, 기존 textfile로 저장, 로드의 시간 소요가 절약된다. import pickle a = {'hello': 'world'} with open('filename.pickle', 'wb') as handle: pickle.dump(a, handle, protocol=pickle.HIGHEST_PROTOCOL) w..
python에서 dataframe을 사용하다 보면, 결과가 ...으로 나오는 경우가 있다. 전체적인 결과를 보고 싶을때는 간단하게 pd에 option을 세팅해주면 된다. (display all text in a cell without truncation) pd.set_option('display.max_colwidth', -1) 그 외에도 다양하게 option을 변경해서, rows, heights을 변경할 수 있다. HTML코드도 출력이 가능하다. 아래 참고 참고 http://songhuiming.github.io/pages/2017/04/02/jupyter-and-pandas-display/
Jupyter notebook background로 실행하는 방법 & token 확인하는 방법 python 코드를 jupyter notebook에서 사용을 자주하는데 이때 평소대로 jupyter notebook을 터미널에서 실행시키면 터미널이 종료되는 시점에 jupyter notebook도 같이 종료되게 된다. jupyter notebook은 아래와 같은 명령어로 시작을 할 수 있다. jupyter-notebook 위 처럼 실행을 하면 localhost에서만 접속이 가능하기 때문에 만약 서버로서 노트북을 실행시키고 싶으면 --ip=0.0.0.0을 함께 넣어줘야 한다. 터미널과 상관없이 백그라운드에서 jupyter notebook을 실행 하는 방법에 대해서 알아보자. 물론 터미널이 종료되던, 상관없이 항상..
Python 사전(Dictionary)에서 값을 기준으로 topK를 추출하는 방법 python에서 dictionary를 갖고 있을때 (key, value)에서 value를 기반으로 topK를 뽑아내는 방법을 제시한다. 사전에서 값을 기준으로 정렬을 한 뒤에, [:N]을 이용해서 값을 추출할 수 있지만, 간단하게 한줄로 끝낼 수 있다. 기존 파이썬 패키지에 있는 heapq를 이용하면 된다. heapq는 Heap queue algorithm으로 priority queue 알고리즘을 이용해서 값을 찾아낸다. heaps은 binary tree를 이용하기 때문에 O(nlogn) 더 자세한 내용을 및 이론을 알고 싶으면 https://docs.python.org/2/library/heapq.html에서 8.4.3 ..