TensorFlow 기본 사용법 II
행렬 곱셈
"우분투에 Tensorflow 설치하기"에 이어 "TensorFlow 기본사용법 I (jupyter notebook)"에서 텐서플로우를 설치하고 jupyter라는 에디터를 열어서 텐서플로우를 불러오는 과정까지 해보았습니다. 이번에는 본격적으로 Neural Net을 만들기 위한 기본 단계인 행렬을 곱하는 방법에 대해서 살펴보겠습니다.
터미널 창(ctrl + alt + t)을 열어 jupyter notebook을 열어주시고 지난번에 만든 practice1파일을 열어주세요.
$ jupyter notebook
행령의 곱셈이 기억이 안나시는 분들을 위해 간단하게 되짚어보겠습니다. 아래 식에서 보는 바와 같이 곱해지는 두 행렬 중 앞 행렬의 행과 뒤 행렬의 열을 곱해서 곱해진 행렬의 행과 열이 결정됩니다.
사진출처 : http://terms.naver.com/entry.nhn?docId=3569496&cid=58944&categoryId=58970
간단한 예제를 하나 만들어 보겠습니다.
A = [ 2, 1 ]
B = [ 1, 1 ]
X = [ 1, -1]
[ -1, 2]
A와 B 두 개의 1X2 행렬과 X라는 2X2행렬이 있습니다. 여기서 "A * X"와 "B * X" 두 가지를 구하려고 합니다. 이것을 텐서플로우 함수를 이용해서 풀면 아래와 같습니다.
import tensorflow as tf |
A = [[2, 1]] |
result_A = tf.matmul(A, X) |
sess = tf.Session() |
행렬 곱셈에 사용하는 함수는 tf.matmul입니다. 그리고 tf.Session이라는 함수를 사용합니다. 텐서플로우는 프로그램 내에서 함수들을 이용해서 구조를 형성한 다음 계산 과정은 따로 컴퓨터 내에 계산을 할 공간을 따로 할당 받아 계산을 합니다. 이렇게 해서 상위 언어에서 작성된 내용들이 매번 CPU까지 가서 계산을 하고 돌아오는 번거로움을 줄여주는 것 입니다. 만약 세션을 열지 않고 바로 결과를 출력하려 하시면 예상되는 형태만 보여주는 것을 알 수 있을 것 입니다.
주피터에서 위의 코드를 입력해 주시면 아래 사진과 같을 결과를 확인 할 수 있습니다.
텐서플로우를 배우는데 왜 매트릭스 곱셈을 먼저 배웠는지 궁굼하실텐데 아래의 간단한 예시를 통해서 설명해 드리겠습니다. 높이가 2m 이고 무게가 1kg인 물체A와 높이가 1m이고 무게가 1kg인 물체B가 있는데 이것을 구분하고 싶다고 생각해 봅시다.
그렇다면 물체 A = [1, 1]
물체 B = [1, 2]으로 둘 수 있습니다.
그리고 결과가 [1, 0]이 되면 물체A
[0, 1]이 되면 물체B가 되는 어떤 계수들이 있습니다.
이 계수들을 행렬로 만들면
[[1, -1],
[-1, 2]] 가 되고 이 행렬을 이용하면 물체가 A인지 B인지 구분할 수 있습니다.
이것을 뉴럴넷의 모양으로 나타내면 아래와 같습니다.
왼쪽의 동그라미 두 개는 A, B의 입력값에 해당하고 화살표들은 이를 구분하는 2X2 행렬의 계수들 그리고 우측 동그라미 두 개는 결과 값에 해당합니다.
이렇게 간단한 모델의 경우 쉽게 그 계수를 찾을 수 있지만 모델이 복잡해진다면, 손으로는 풀 수 없을 정도로 복잡해질 것 입니다. 반면 충분히 빠른 계산과 적절한 구조를 만든다면 구분하기 매우 힘든 것도 구별해낼 수 있는 프로그램을 만들 수 있을 것 입니다. 이 구조와 계수를 찾는 과정에서 어떤 모델들은 이전의 기술을 훨씬 뛰어넘는 성과를 얻었고 딥러닝이 주목받기 시작하는 계기가 되었습니다. 앞으로 과정을 통해서 이러한 것들을 이해하고 배우실 수 있을 것 입니다.
TensorFlow 기본 사용법 III (간단한 학습)
※ 작성된 자료는 TensorFlow 공식 홈페이지(https://www.tensorflow.org)의 내용을 기반으로 작성했습니다.
'정보공유 > 개발&코딩' 카테고리의 다른 글
TensorFlow 기본 사용법 IV (API 활용법) (0) | 2017.06.19 |
---|---|
TensorFlow 기본 사용법 III (간단한 학습) (0) | 2017.06.14 |
Tensorflow 기본 사용법 I (jupyter notebook 열기) (0) | 2017.06.12 |
(시뮬레이션) 터틀봇 소프트웨어 설치 (0) | 2017.06.12 |
우분투에 TensorFlow 설치하기 (0) | 2017.06.10 |