본문 바로가기

정보공유/개발&코딩

TensorFlow 기본 사용법 II (행렬 곱하기)









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]]
B = [[1, 1]]

X = [[1, -1], [-1, 2]]

result_A = tf.matmul(A, X)
result_B = tf.matmul(B, X)

sess = tf.Session()
result_A, result_B = sess.run([result_A, result_B])

print "Result from A :", result_A
print "Result from B :", result_B



행렬 곱셈에 사용하는 함수는 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)의 내용을 기반으로 작성했습니다.


페이스북에 공유하기