[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정보] - 블록체인 이란? - 블록체인 개념 이해하기(퍼블릭,프라이빗,컨소시엄,하이브리드)

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

    댓글

    Designed by JB FACTORY