IT정보

[TensorFlow] 텐서플로우 기본 이해

Danie Kim 2021. 4. 3. 14:00

텐서플로우 기본 이해

텐서플로우를 사용한 머신러닝 공부 내용을 정리하는 차원에서 블로그 카테고리를 만들어 글을 남겨볼려고한다.

해당 카테고리의 글들은 여러 사이트 및 영상을 참고하여 정리한 내용이다.

-참고 사이트

https://www.tensorflow.org/?hl=ko

https://www.youtube.com/channel/UCML9R2ol-l0Ab9OXoNnr7Lw

 

 

텐서플로우(TensorFlow)란?

텐서플로우는 텐서(Tensor)들이 흐른다는 의미를 갖고 있다. 우리가 작성한 텐서들이 돌아 다니면서 기계가 학습하는 그림을 머리속에서 그리면 조금 더 쉽게 이해 할 수 있을 것이다.

 

텐서플로우는

-구글에서 만든 오픈소스 라이브러리다.

-데이터 흐름 그래프(Data Flow Graph)를 사용하여 수치 연산을 해주는 라이브러리다.

-기계 학습분야의 프로그램을 만들기 위한 라이브러리다.

 

기계학습을 위한 오픈소스 라이브러리는 많이 존재한다. 하지만, 그 많은 라이브러리들 중 웹상으로 가장 많은 정보가 존재하여 압도적으로 많이 사용되고 있다.

 

 

데이터 플로우 그래프(Data Flow Graph)란?

텐서플로우에서 가장 핵심이 데이터 플로우라 알고 넘어가자.

 

 

데이터 플로우 그래프는 말 그대로 데이터의 흐름을 보여주는 그래프이다.

이 그래프는 노드(Node)와 엗지(Edge)로 구성되어 있다.

 

노드 : 다차원 배열로 이루어진 하나의 연산

엗지 : 노드들의 연산을 이어주는 선(데이터 흐름)

 

 

 

텐서플로우는 edges와 nodes로 구조화된 그래프로 프로그램이 구성되어 있다.

데이터 플로우 그래프는 텐서플로우의 기본 설계가 되고, 각 노드들을 독립변수로 지정하여 학습을 진행한다.

 

 

텐서(Tensors)

텐서플로우를 이해하는데  Tensor에대한 개념도 이해를 해야한다.

텐서는 하나의 배열을 말한다.

tensor = [
[1,2],
[3,4],
[5,6],
[7,8]
]

텐서는 Rank, Shape, Type 총 3가지 특징을 갖는다.

 

Rank : 텐서가 몇 차원의 배열인가

위 텐서는 matrix형태이므로  Rank는 2가 될것이다.

 

Shape: 배열의 모양

이부분은 나중에 있어서 굉장히 중요하여 꼭 파악할 수 있어야한다.

변수지정을 해주는 작업에서 하나이상의 독립, 종속변수가 존재할때,  Shape를 꼭 알아 주어야한다.

위 텐서는 4*2 형태의  Shape를 갖고 있다.

 

Type: 텐서 값의 타입

주로 float.32를 많이 사용한다.

 

텐서플로우 설치 및 코드 메커니즘

텐서플로우는 Python의 pip를 이용하여 설치를 해주어 import해서 사용한다.

pip install -upgrade tensorflow

 

텐서플로우 프로그램을 작성시 아래 3가지 순서에 의해 코딩작업을 진행한다.

- 데이터 플로우 그래프 설계

- 세션 생성 및 실행

- 변수 값 feeding

 

데이터 프로우 그래프 설계

단일 값 혹은 연산을 진행하는 노드를 작성해준다.

import tensorflow as tf

# 노드 생성
node1 = tf.constant(5., tf.float32)
node2 = tf.constant(8.)
node3 = tf.add(node1, node2)

print("node1 : " , node1, "\nnode2 : ", node2, "\nnode3 : ,node3)

 

 

 

세션 생성 및 실행

텐서 플로우에서는 노드의 연산을 실행해주기 위해 세션을 생성하여 run시켜줘야한다.

# 세션을 만들어서 실행을 해준다
# with를 사용하여 코드 실행 후 세션 close
with tf.Session() as sess:
	# 결과는 run을 통해서 실행을 해주는것이다.
    print("sess.run(node1, node2) : ", sess.run([node1, node2])
    print("sess.run(node3) : ", sess.run(node3))

 

 

 

변수 값 feeding

노드를 변수형태로 만들어 해당 노드에 수치를 넣어서 연산을 해준다.

# placeholder를 이용해서 사용할 변수 지정
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b
 
with tf.Session() as sess:
    # 값들만 바꿔서 실행해줄수 있다.
    print(sess.run(adder_node, feed_dict={a: 11., b: 8.5}))
    print(sess.run(adder_node, feed_dict={a: [1., 100.], b: [200., 400.]}))

 

 

 

전체코드

import tensorflow as tf
 
# 노드 생성
node1 = tf.constant(5., tf.float32)
node2 = tf.constant(8.)
node3 = tf.add(node1, node2)
 
print("node1 : ", node1, "\nnode2 : ", node2, "\nnode3 : ", node3)
 
# placeholder를 이용해서 사용할 변수 지정
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b
 
# 세션을 만들어서 실행을 해준다
# with를 사용하여 코드 실행 후 세션 close
with tf.Session() as sess:
    # 결과는 run을 통해서 실행을 해주는것이다.
    print("sess.run(node1, node2) : ", sess.run([node1, node2]))
    print("sess.run(node3) : ", sess.run(node3))
 
    # 값들만 바꿔서 실행해줄수 있다.
    print(sess.run(adder_node, feed_dict={a: 11., b: 8.5}))
    print(sess.run(adder_node, feed_dict={a: [1., 100.], b: [200., 400.]}))

해당 예제에서는 간단한 연산작업만을 진행하여 텐서플로우의 유용성과 강력함을 확인하기 어려울것이다. 하지만, 기계학습을 위한 트레이닝 모델을 작성하는 작업을 앞으로 진행하면서 쉽게 이해할 수 있을것이다. 이번 글에서는 텐서플로우의 흐름과 이해하는 것이 중요하다.

 

함께 보면 좋은 글

2021.04.03 - [IT정보] - 0.01%만 성공한다는 '모바일 앱' 개발, 어떻게 만들어야 할까

2021.04.03 - [IT정보] - “스마트 시티란 도대체 무엇인가?”

2021.04.02 - [IT정보] - 블록체인의 동작원리 및 구성요소

2021.04.02 - [IT정보] - 블록체인 이란? - 블록체인 개념 이해하기(퍼블릭,프라이빗,컨소시엄,하이브리드)

2021.04.02 - [IT정보] - 포렌식이란?