카테고리 보관물: Python

Gradientzoo – 머신러닝 모델 공유

스크린샷 2016-04-26 오후 1.50.21

파이썬에서 학습된 머신러닝 모델을 저장하고 복원하는(즉 serialization 과 deserialization) 몇가지 방법 중 보통은 pickle 이나 dill 을 사용할 수 있습니다. 최근에는 JSON 을 사용하는 경우도 많이 있는 것 같습니다. 이와 관련된 주제로 한 번 정리를 하면 좋을 것 같습니다.

Gradientzoo 는 오픈소스 프로젝트로서 학습된 모델을 직렬화하는 파이썬 라이브러리 뿐만 아니라 이를 공유하는 사이트도 모두 오픈소스로 공개하였습니다. 다른 사람이 만든 모델을 다운받아 이를 이용하여 모델링을 시작하자는 취지 입니다. graidentzoo는 현재 Keras, Lasagne, TensorFlow 를 지원하고 있습니다.

Andrew Ng의 머신러닝 강좌의 Python 코드 버전

머신러닝을 배우기 위해 온라인 강의 중 어떤게 좋은가요 라고 물어보면 열명이면 열명 모두 Andrew Ng머신러닝 강좌를 추천할 것이라는 데 의심의 여지가 없습니다. 이 강좌는 작년부터 self-paced로 제공되고 있어서 시간이 없어 매주 분량을 쫒아가기 힘든 분들에게도 마감시간에 구애 받지 않고 천천히 학습할 수 있도록 하고 있습니다.

이 강의의 단점(?)이라고 하면 강의와 숙제가 Matlab의 오픈소스 클론인 Octave로 진행된다는 점 입니다. Octave가 시작하기 어려운 언어는 아니기에 큰 장벽이 되지는 않지만 Octave를 배워서 학교나 회사에서 사용할 수 있는 가능성은 희박합니다.

David Kaleko는 Andrew Ng의 머신러닝 강좌의 모든 숙제를 Python으로 재 작성하여 깃허브에 공유하였습니다. Octave에 어려움을 겪으시는 분들은 Python 버전이 도움이 되실 것 같습니다.

오픈소스로 간 머신러닝

구글이나 마이크로소프트 같은 회사들의 영향인지 최근 들어 오픈소스화 되고 있는 머신러닝 프로젝트들이 점점 늘어나고 있는 것 같습니다. 구글이나 OpenAI 도 그렇겠지만 오픈소스로 개발자 커뮤니티를 형성하는 것이 이 생태계에 뒤쳐지지 않는 것임을 소규모 스타트업들도 알고 있는 것 같습니다.

Seldon(www.seldon.io)은 작년 2월에 자사의 머신러닝 소프트웨어를 깃허브(https://github.com/SeldonIO/seldon-server/)에 공개하였습니다. Seldon은 컨텐츠 추천과 예측모델을 위한 서버 어플리케이션으로 자바로 이루어져 있습니다. 최근에 공개된 블로그에서는 왜 오픈소스를 택하게 되었는지 또 그 이후에 어떤 변화가 있었는지 등을 설명하기도 했습니다.

Seldon은 최근에 University College London(UCL)의 한 그룹과 데이터 탐색과 관련된 프로젝트를 진행하고 있습니다. 이 프로젝트는 ETL for Data Science 로 데이터의 클리닝, 시각화, 분석을 웹 기반의 어플리케이션에서 할 수 있는 도구입니다. 어플리케이션 아키텍처에서 볼 수 있듯이 Python 의 Flask 와 AngularJS, SocketIO 로 구성되어 있습니다.

architecture1

Outline of application architecture – 출처 ETL for Data Science 프로젝트 홈페이지

데이터 탐색과 관련해서는 두드러지는 프로젝트가 많지는 않습니다. 탐색 자체가 비정형화된 형태이다 보니 이를 패키지화하는 것이 쉬운일은 아닐 것 같습니다. ETL for Data Science 와 유사한 아파치 프로젝트로는 Zeppelin이 있습니다. Zeppelin은 자바와 Spark 기반의 서버 소프트웨어로 notebook 스타일의 유저 인터페이스를 가지고 있습니다. Zeppelin 은 개발자들이 동시에 하나의 notebook을 수정할 수 있는 콜라보레이션을 지원합니다. notebook 스타일이다 보니 Zeppelin은 엔지니어나 데이터 분석가를 대상으로 합니다. 그에 반해 ETL for Data Science 는 그래픽 환경을 기반으로 하고 있어 그 대상이 좀 더 폭 넓다고 할 수 있습니다.

Zeppelin 프로젝트도 Seldon 과 유사하게 기존의 어플리케이션을 오픈소스화한 경우로 아직 아파치 인큐베이팅 단계에 있습니다. Zeppelin 프로젝트를 이끄는 회사는 국내 스타트업인 NFLabs입니다. 아래는 NFLabs의 CTO이자 Zeppelin 커미터인 이문수님의 Zeppelin 소개 동영상입니다.

실수하기 쉬운 Python 코드

이 글은 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 을 참고하여 작성되었습니다.

머신러닝 분야에서 선호되는 언어로는 Python 과 R 이 자주 비교대상이 됩니다. 두 언어의 태생의 근원을 생각해 보면 아마도 Python 은 전통적인 소프트웨어 엔지니어 그룹에서 R 은 통계나 수학자 그룹에서 많이 사용될 것 같습니다. 이 글은 Python 에서 버그를 만들기 쉬운 코드에 대해 설명을 하고 있습니다. Python 에 꽤 익숙한 저도 눈으로만은 잡아내기 힘들더군요 ; )

계속 읽기

메소드 체이닝 스타일의 텐서플로우 래퍼(Wrapper) 프리티 텐서(Pretty Tensor)

구글이 skflow 에 이어서 텐서플로우의 래퍼(Wrapper) 모듈을 하나 더 발표하였습니다. 바로 프리티 텐서(Pretty Tensor) 입니다.

프리티 텐서는 메소드 체이닝 형태로 쓸 수 있는 가벼운 래퍼 라이브러리입니다. 간단한 예를 살펴 보면 금방 이해할 수 있습니다.

result = (pretty_tensor.wrap(input_data, m)
          .flatten()
          .fully_connected(200, activation_fn=tf.nn.relu)
          .fully_connected(10, activation_fn=None)
          .softmax(labels, name=softmax_name))

프리티 텐서는 skflow 와는 다르게 pypi 에 등록되어 있어 pip 를 이용해 바로 설치할 수 있습니다.

$ pip install prettytensor

사용자들이 텐서플로우를 보다 쉽게 이용할 수 있도록 구글이 많은 노력을 기울이는 것 같습니다. 보다 자세한 내용은 프리티 텐서 기트허브 페이지를 참고하세요.

https://github.com/google/prettytensor

(추가) Pretty Tensor는 0.6 버전이 되었습니다.

skflow: scikit-learn 스타일의 TensorFlow 인터페이스

구글에서 TensorFlow 를 오픈소스로 공개하면서 Python API 와 C/C++ API 를 같이 제공했습니다. 하지만 문서화 등을 고려하면 TensorFlow를 사용할 때에는 Python 이 주력 언어로 보입니다. 구글은 Python API 에 한 걸음 더 나아가 이미 유명한 scikit-learn 패키지와 유사한 인터페이스로 TensorFlow 를 사용할 수 있는 skflow 를 공개했습니다.

https://github.com/google/skflow

scikit-learn 의 fit/predict 방식을 사용했던 개발자들은 좀 더 손쉽게 TensorFlow 를 시작할 수 있을 것 같습니다. skflow 를 설치하는 방식은 TensorFlow 와 마찬가지로 pip 에서 git 레파지토리를 지정해서 가능합니다.

$ pip install git+git://github.com/google/skflow.git

skflow 와 TensorFlow 를 활용한 튜토리얼도 있는데요. 시간이 되면 번역을 하여 공유하도록 하겠습니다. (추가: 번역된 글입니다.)

Introduction to Scikit Flow and why you want to start learning TensorFlow

TensorFlow 를 이용한 생태계가 얼마나 활성화 될 지 기대가 됩니다.

[update] 텐서플로우 0.6 이 릴리즈 되면서 skflow 를 import 하면 아래와 같은 에러가 발생합니다.

In [1]: import skflow
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-1-cb8af396def9> in <module>()
----> 1 import skflow
...
 23 import tensorflow as tf
 24
---> 25 linear = tf.nn.linear

AttributeError: 'module' object has no attribute 'linear'

이는 linear 함수가 tensorflow.models.rnn 아래에서 tensorflow.python.ops.rnn_cell 밑으로 이동했기 때문입니다. 이 문제를 해결하기 위해서는 업데이트된 skflow 를 재설치 해 주시면 됩니다.

$ pip install --upgrade git+git://github.com/google/skflow.git

재설치하더라도 skflow 의 버전은 0.0.1 로 변하지 않습니다.

(추가) skflow 0.1 버전이 릴리즈 되었습니다.