개발자의시작

[머신러닝][딥러닝] TensorFlow 설치 및 기본 동작 1.1 본문

머신러닝(machine learning)

[머신러닝][딥러닝] TensorFlow 설치 및 기본 동작 1.1

LNLP 2020. 4. 8. 11:54

이 글은 홍콩과기대 김성훈 교수님의 강의를 개인적으로 정리한 글입니다.

 

강의 영상 및 강의자료는 아래의 링크에서 확인하실 수 있습니다.

링크 : http://hunkim.github.io/ml/

 

모두를 위한 머신러닝/딥러닝 강의

 

hunkim.github.io

 

TensorFlow 설치는 아래의 링크에서 할 수 있습니다.

링크 : https://www.tensorflow.org/

 

TensorFlow

An end-to-end open source machine learning platform for everyone. Discover TensorFlow's flexible ecosystem of tools, libraries and community resources.

www.tensorflow.org

 

텐서 플로우

TensorFlow is an open source software library for numerical computation using data flow graphs.

데이터 플로우 그래프를 사용하여 수치 계산을 진행하는 라이브러리!

 

Data Flow Graph?

데이터 플로우 그래프는 말 그대로 그래프를 의미하며, 각각의 노드는 하나의 operation이다. 엣지는 다차원의 데이터 배열이다.(Tensor라고도 함) 데이터 플로우 그래프를 통해 연산이나 작업 등을 수행할 수 있다.  그래프를 지나면서 특정 연산이나 작업 등을 수행해 나가는 것이 텐서 플로우이다.

 

텐서 플로우 홈페이지에서 설치를 완료하고 위와 같은 코드를 입력하여 설치가 완료되었는지 확인할 수 있다.

 

Hello TensorFlow!

1
2
3
hello = tf.constant("Hello, TensorFlow!")
sess = tf.Session()
 

- tf.constant()를 통해 문자열이 담긴 하나의 노드를 생성

- computational graph를 실행하기 위해서는 Session을 만들고 sess.run() 과 같이 실행해야 한다.

 

파이썬에서 출력 결과 문자열 앞에 b가 붙는 경우가 있는데 이는 Bytes string임을 의미함

 

Computational Graph

 

더하기 연산을 위한 그래프는 위와 같이 생성된다. 노드 b에 있는 값과 노드 a에 있는 값을 더하는 연산을 의미한다.

1
2
3
4
5
node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0)
 
 
 
 

node1과 node2를 위와 같이 생성한다. node3은 단순히 node1과 node2를 더하는 연산을 수행하는 노드이며,

node3= node1+node2 와 같이 작성해도 무방하다.

 

node1, node2 그리고 node3을 출력해본 결과이다. 출력 결과 값이 나오는 것이 아닌 어떤 텐서(Tensor)인지에 대한 정보를 출력한다. 따라서 결과를 출력하기 위해서는 위에서 언급했던 것과 같이 Session()을 생성하고 sess.run을 통해 실행시켜야 한다.

 

1
2
3
4
5
 
 

실행결과

 

TensorFlow의 매커니즘은 다음과 같이 정리할 수 있다.

1) 텐서 플로우 툴을 이용해서 그래프 빌드

2) sess.run(op)를 이용해 그래프를 실행

3) 그래프 속에 있는 값들이 업데이트되거나 값을 리턴

 

Placeholder

그래프를 미리 만들어 놓고 실행시키는 단계에서 값을 넘겨주고 싶을 때 placeholder()를 사용한다.

1
2
3
4
5
6
= tf.placeholder(tf.float32)
= tf.placeholder(tf.float32)
adder_node = a+b
 
print(sess.run(adder_node, feed_dict = { a: 3, b: 4.5}))
print(sess.run(adder_node, feed_dict = { a: [1,3], b: [2,4]}))
 

constant 대신 placeholder를 사용하여 a와 b 노드를 만든다. 또한 adder_node는 a노드와 b노드를 더하는 연산 노드가 된다. sess.run(op)를 통해 그래프를 실행시키는데 feed_dict를 통해 값을 넘겨주면서 그래프를 실행시킬 수 있다. 이때 넘겨주는 값은 숫자뿐 아니라 배열을 통해 여러 개도 가능하다. 

 

실행결과

Everything is Tensor!

텐서는 기본적으로 array(배열)을 의미한다.

 

1
2
3
4
5
3            #a rank 0 tehnsor;
[1. ,2.3.]    # a rank 1 tensor;
[[1. ,2.3.], [4. ,5.6.]]    #a rank 2 tensor
[[[1. ,2.3.]], [[7. ,8.9.]]]    #a rank 2 tensor
 
 
 

Tensor Ranks, Shapes, and Types

텐서를 얘기할 때는 ranks, shapes, types 등으로 말한다.

예)

Rank Math entity Python example
0 Scalar s = 483
1 Vector v = [1.1, 2.2, 3.3]
2 Matrix m=[[1, 2, 3], [4,5,6], [7, 8, 9]]
3 3-Tensor t =[[[1], [4], [6]], [[8], [10], [12]], [[14, [16], [18]]]
n n-Tensor .....

위의 예를 shape로 나타내면 아래와 같다.

Rank Shape Dimension number example
0 [] 0-D A 0-D tensor. A scalar
1 [D0] 1-D A 1-D tensor with shape [5]
2 [D0, D1] 2-D A 2-D tensor with shape [3, 4]
3 [D0, D1, D2] 3-D A 3-D tensor with shape [1, 4, 3]
n [D0, D1, .... Dn-1] n-D A tensor with shape [D0, D1, ..... Dn-1]

대표적인 텐서의 타입은 아래와 같다.

Data type Python type Description
DF_FLOAT tf.float32 32 bits floating point
DF_DOUBLE tf.float64 64 bits floating point
DF_INT tf.int8 8 bits signed integer
DF_INT16 tf.int16 16 bits signed integer
DF_INT32 tf.int32 32 bits signed integer
DF_INT64 tf.int64 64 bits signed integer

 

오류 또는 이상한 점 있다면 댓글로 남겨주시기 바랍니다.

감사합니다.

Comments