텐서플로(Tensorflow) 시작하기
https://gist.github.com/haje01/202ac276bace4b25dd3f
소개
텐서플로우(TensorFlow)는 기계 학습과 딥러닝을 위해 구글에서 만든 오픈소스 라이브러리입니다. 데이터 플로우 그래프(Data Flow Graph) 방식을 사용하였습니다.
데이터 플로우 그래프
데이터 플로우 그래프는 수학 계산과 데이터의 흐름을 노드(Node)와 엣지(Edge)를 사용한 방향 그래프(Directed Graph)로 표현합니다.
노드는 수학적 계산, 데이터 입/출력, 그리고 데이터의 읽기/저장 등의 작업을 수행합니다. 엣지는 노드들 간 데이터의 입출력 관계를 나타냅니다.
엣지는 동적 사이즈의 다차원 데이터 배열(=텐서)을 실어나르는데, 여기에서 텐서플로우라는 이름이 지어졌습니다.
텐서(Tensor)는 과학과 공학 등 다양한 분야에서 이전부터 쓰이던 개념입니다. 수학에서는 임의의 기하 구조를 좌표 독립적으로 표현하기 위한 표기법으로 알려져 있지만, 분야마다 조금씩 다른 의미로 사용됩니다. 여기에서는 학습 데이터가 저장되는 다차원 배열 정도로 이해하시면 되겠습니다.
특징
텐서플로우는 다음과 같은 특징을 가집니다:
- 데이터 플로우 그래프를 통한 풍부한 표현력
- 코드 수정 없이 CPU/GPU 모드로 동작
- 아이디어 테스트에서 서비스 단계까지 이용 가능
- 계산 구조와 목표 함수만 정의하면 자동으로 미분 계산을 처리
- Python/C++를 지원하며, SWIG를 통해 다양한 언어 지원 가능
이후의 설명은 Python을 중심으로 진행하겠습니다. (pip를 통한 Python3설치는 개발 중으로, Python2 기반으로 하겠습니다.)
"구글이 텐서플로우를 오픈소스로 한 것은, 기계 학습이 앞으로 제품과 기술을 혁신하는데 가장 필수적인 요소라고 믿기 때문입니다." - Google Brain Team
설치
텐서플로우는 설치가 비교적 쉬운 편입니다만, 다음과 같은 제약이 있습니다:
- Unix계열 OS(Linux/Mac OSX)만 지원합니다.
- GPU 버전은 Linux만 지원합니다.
Linux / Mac OSX
Unix 계열 OS를 사용하시는 분들은 공식 페이지의 설치 문서를 참고하시면 쉽게 설치할 수 있습니다.
윈도우
윈도우 사용자 분들은 가상 머신을 이용하거나, 도커 툴박스 설치 후 진행하시기 바랍니다.
이미지를 받고 컨테이너 실행
텐서플로우의 도커 이미지는 소스코드, 예제, 툴도 포함되어 있기에 풀 버전을 받는 것을 권합니다.
Linux / Mac OSX
Unix 계열 OS에서는 아래의 명령을 실행하면 이미지를 받고 컨테이너가 실행됩니다. 컨테이너 실행 후 자동으로 컨테이너 안의 쉘 환경으로 들어가게 됩니다.
docker run -it b.gcr.io/tensorflow/tensorflow-full
컨테이너 안의 /tensorflow
폴더에 소스가 설치되어 있습니다. (주의: 이 폴더에서 모듈을 import 하시면 에러가 발생합니다. )
윈도우
윈도우의 경우 Docker QuickStart Terminal 실행 후(이때 고래 그림 아래의 IP를 기억해 둡니다) 아래와 같이 실행하시기 바랍니다.
winpty docker run -it -p 8888:8888 b.gcr.io/tensorflow/tensorflow-full
이미지를 받은 후 컨테이너가 실행되면, Jupyter 노트북 서버가 자동으로 시작된 상태입니다. 웹브라우저에서 '위의IP:8888'을 입력하면 Jupyter Notebook 환경에 접속됩니다. 여기에서 tensorflow를 사용하실 수 있습니다.
동작 확인
설치가 잘 되었는지 다음의 코드로 확인해봅니다.
$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>>
.
'프로그래밍 > Python' 카테고리의 다른 글
Python socket programming 채팅 (0) | 2017.03.20 |
---|---|
codecademy.com python 100% complete. (0) | 2017.02.15 |
[Python] 문자열을 반복하여 붙이는 3가지 코딩 방법 및 수행 시간 비교 (0) | 2016.08.11 |
[Python] 윈도우즈에 파이썬 개발 환경 구축 참고 자료 (0) | 2016.08.11 |
[Python] 파이썬 함수 (0) | 2016.08.11 |