Python 27

Jupyter Lab

소개 파이썬은 장점이 참 많은 언어입니다. 깔끔한 문법, 수많은 라이브러리, 다양한 실행 환경 등 말이죠. 파이썬의 수많은 장점 중에서 빼놓을 수 없는 것이 바로 인터렉티브한 개발 환경이라고 생각합니다. C/C++나 Java 같은 언어만 사용하다가 파이썬을 접하게되면 언어 자체 뿐만 아니라 인터렉티브한 개발 환경에 감탄을 하게 됩니다. 아주 기본적인 REPL(Read-Eval-Print Loop)를 제공하는 기본 파이썬 명령만 하더라도 이미 훌륭하지만, 여기에서 iPython으로 넘어간다면 그야말로 신세계를 경험할 수 있습니다. 이렇게 뛰어난 파이썬의 개발 환경 속에서도 요즘 가장 돋이는 것은 Jupyter Lab이라고 할 수 있습니다. Jupyter Lab을 사용하면 IDE를 따로 설치하지 않고도 웹 ..

Python 2021.05.01

Tensorflow가 GPU를 지원하는지 알아보자

Tensorflow를 설치해서 사용하다보면 현재 설치된 환경이 GPU를 제대로 지원하는지 아닌지 궁금할 때가 있습니다. 요즘은 설치가 많이 편해지기는 했지만, 리눅스 버전, GPU driver 버전, TF 버전, Cuda 버전 등 모두 맞추기가 쉽지 않았으니까요. TF를 설치를 해도 나도 모르게 CPU 버전으로 돌아가는 경우가 왕왕 있습니다. (GPU Tensroflow는 Docker를 이용하는 것을 추천합니다. Docker를 이용해서 편리하게 GPU Tensorflow를 사용하자) 현재 환경이 GPU를 지원하는지 어떻게 알 수 있을까요? 구글링을 해보면 TF 1.x 시절부터해서 여러가지 방법이 나옵니다. 현재 TF 2.x 기준으로 가장 간략한 방법은 다음 코드를 실행해보는 것입니다. import ten..

Deep Learning 2020.06.24

*args, **kwargs

*args, **kwargs Python 코드를 보다보면 함수에 *args, **kwargs와 같은 표현을 볼 수 있습니다. 가변 인자들인데요. 가변 인자라는 말부터가 어렵습니다. 함수에 전달한 인자들이 딱 고정되어 있지 않고, 상황에 따라 바뀔 때를 지원하기 위해서 사용하는데요. 예를 들어서 한번 살펴보겠습니다. positional arguments, keyword arguemnts 본격적으로 *args, **kwargs에 대해서 이야기하기 전에 positional arguments와 keyword arguments를 먼저 다루어보겠습니다. 예를 들어 아래와 같은 함수가 있다고 가정해보겠습니다. def f(a, b, c): print(a, b, c) 아래와 같이 일반적으로 호출을 할 수 있습니다. f(..

Python 2020.06.23

Tensorflow Custom Layer

Tensorflow Custom Training에서는 keras의 Model 클래스를 이용해서 Custom Model을 만들고 훈련시키는 법을 알아보았습니다. 이번에는 tf.keras.layers.Layer를 사용해서 Custom Layer를 만드는 법을 알아보겠습니다. Tensorflow Custom Training에서 만들었던 예시를 사용해서 이야기를 이어가보겠습니다. tf.keras.Sequential을 쓰지 않고 직접 Model의 동작을 구성하기 위해서 Custom Model을 사용한다면, Custom Layer는 Model 내에서 특정 Layer의 동작을 직접 구성하기 위해서 사용합니다. 예를 들어 새로운 Dropout 알고리즘을 생각해냈다고 가정해보겠습니다. MyDropout이라는 Layer를..

Deep Learning 2020.06.12

Python Reflection 맛보기

Introspection vs Reflection Python이 가지는 매력 중의 하나는 언어의 많은 부분이 동적이라는 점입니다. Instrospec과 Reflection이 그런 기능 중 일부인데요. Introspection은 실행 시에 object에 대한 정보를 알아내는 것, Reflection은 여기에서 그치지 않고 object에 대한 정보를 수정하는 것을 의미합니다. 엄밀히 두가지의 의미가 다르지만 Reflection으로 합쳐서 부르는 경우가 많습니다. Reflection 기능은 자주 쓰이지는 않지만 알아두면 유용할 때가 있습니다. 예를 들어, 코드 작성 시에는 함수 이름을 모르지만 실행 중에 함수 이름을 알아내서 실행시킨다거나, Python의 Duck typing을 통과하기 위해서 attribut..

Python 2020.06.09

pyc 파일에 대해서

1. *.pyc 파일 Python으로 코딩을 하다 보면 내가 만들지 않은 *.pyc 파일들이 만들어져 있는 것을 볼 수 있습니다. 가끔은 *.pyc가 문제를 일으키기도 하고요 (bad magic number in 'application': b'\x03\xf3\r\n': ImportError) *.pyc는 Python이 *.py를 읽어서 실행시킬 때 자동 생성되는 파일인데, 이는 Python 프로그램이 어떻게 구동되는지와 관련이 있습니다. (이야기를 진행하기에 앞서 한가지 명확히 해야 할 것이 있습니다. 우리가 보통 Python이라고 이야기하지만, Python이라는 것은 프로그래밍 언어이기 때문에 앞으로 이야기할 내용은 엄밀히는 CPython에 대한 이야기입니다. CPython은 Python이라는 언어를 ..

Python 2020.06.03

-m 실행 옵션과 __name__

Python 관련 글들을 보다 보면 스크립트를 실행시킬 때 어떤 때는 python3 script.py처럼 실행시키고, 어떤 때는 python3 -m script처럼 -m 옵션을 사용해서 실행시킬 때가 있습니다. 차이는 무엇일까요? 전자는 script.py를 실행시키는 것이고, 후자는 script라는 이름의 모듈을 sys.path에서 찾아서 실행시키는 것입니다. sys.path에 대한 설명은 알쏭달쏭 Python import - sys.path을 참고하세요. 오늘도 간략한 예시를 들어서 알아보겠습니다. 1. 간단한 함수부터 아래와 같은 Python 코드를 만들고 있다고 가정해보겠습니다. 주어진 문자열 주위를 아름답고 화려한 *으로 감싸주는 코드입니다. import sys def print_with_bord..

Python 2020.05.28

Pre-trained Word Vector를 Tensorflow에서 사용하기

Tensorflow에서 제공하는 Embedding Layer는 간편하게 사용하기에 좋습니다. 하지만 아무래도 대량의 데이터를 사용해서 별도로 훈련시킨 Word Embedding을 사용하는 것보다는 성능이 떨어집니다. (Tensorflow의 Embedding Layer vs fastText) fastText 같은 Library는 Python 인터페이스를 제공하기 때문에 pre-trained word vector를 Tensorflow에서 사용하기 쉬운 편입니다 (한국어 토큰의 단위는 뭐가 좋을까?). 하지만 이런 인터페이스가 없이 순수하게 단어와 그 단어의 Embedding 데이터만 있다면 어떻게 할까요? 결론부터 말하면 Keras Embedding Layer의 weights를 수동으로 지정해주고, trai..

Deep Learning 2020.05.20

venv는 내부적으로 어떻게 작동할까?

Python의 모듈 간 의존성 문제를 해결하기 위해서 virtualenv나 venv를 많이 사용하실 겁니다. 시스템에 설치된 모듈들과 virtual environment 내에 설치된 모듈들을 분리해주기 때문에 모듈들이 꼬일 걱정 없이 사용할 수 있어서 참 좋습니다. 개인적으로 저는 새 Python 프로젝트를 시작하면 venv와 git 초기화를 꼭 실행합니다. 그런데 가끔 내부적으로 어떻게 이 기능이 작동하는지 궁금할 때가 있습니다. 그래서 오늘은 venv가 어떻게 작동하는지 한번 알아보겠습니다. (virtualenv도 작동 방식은 거의 동일합니다.) 1. venv를 만들자 먼저 아래 명령으로 virtual environment를 만듭니다. python3 -m venv env 그럼 현재 디렉터리에 env ..

Python 2020.05.19

bad magic number in 'application': b'\x03\xf3\r\n': ImportError

자주 겪는 문제는 아니지만 종종 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 2020.05.19