[TensorFlow] 텐서플로우 기본 이해
텐서플로우 기본 이해
텐서플로우를 사용한 머신러닝 공부 내용을 정리하는 차원에서 블로그 카테고리를 만들어 글을 남겨볼려고한다.
해당 카테고리의 글들은 여러 사이트 및 영상을 참고하여 정리한 내용이다.
-참고 사이트
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정보] - 블록체인 이란? - 블록체인 개념 이해하기(퍼블릭,프라이빗,컨소시엄,하이브리드)