본문 바로가기

좋아하는 것_매직IT/24.tensorflow

10.tensorflow, 텐서플로우(TensorFlow) 에 대한 기초지식에 대해서 알아보자.

반응형

블로그 목적

  • 텐서플로우(TensorFlow) 에 대한 기초지식을 배움으로서 아직 낯설은(?) 텐서플로우와  좀더 친해지자.

텐서플로우의 기초지식을 알아보자

  • 텐서(Tensor) 
    • 텐서(Tensor) 란 무엇인가?
      • 물리학에서 나온 개념으로 벡터와 유사하나 일반화된 개념
      • 그리고, 텐서플로우의 기본 자료형이라 알고있으면 됨.
      • 다차원 배열의 일반화 or 아무 차원이나 가질 수 있는 값들의 집합.
    • 텐서의 구성요소 3가지
      • Rank
        • 텐서플로우에서는 Rank 라는 용어를 통해서 구조를 표현함.
        • 다시말해서, 랭크는 그 차원의 수를 말함
          • 랭크의 동의어는 order 또는 degreen-dimension
        • 참고로 텐서플로우의 랭크는 수학에서 사용하는 행렬의 랭크와는 다름.
        • Rank 의 형태
          • 랭크 수학 개체 예제(python)
            0 Scalar(magnitude only) s = 100
            1 Vector(magnitude and direction) v = [1.1, 1.2, 1.3]
            2 Matrix(table of numbers) m = [ [1,2,3,4], [5,6,7,8] ]
            3 3-Tensor(cube of members) t = [ [ [1],[2],[3] ],[ [4],[5],[6] ] ]
            n n-Tensor(you get the idea) ...
          • 설명
            • 위의 표에서 알 수 있는 것처럼, 텐서플로의 각 랭크는 각각 다른 수학 개체(entity)에 해당됩니다.
              • 0 Rank Tensor 
                • 스칼라를 의미
              • 1 Rank Tensor
                • 1-D(1차원) 벡터와 동일함.
              • 2 Rank Tensor
                • 2-D(2차원) 행렬과 동일함.
              • 3 Rank Tensor
                • 3-D(3차원) 배열과 동일함.
      • Shape
        • 형태(shape)는 각 차원에 있는 원소 개수로 표현됨.
          • 즉, 텐서가 몇개의 행과 열을 갖는지를 의미함.
        • 텐서플로우는 그래프 계산 과정에서 자동으로 텐서 형태를 추론함.
          • 추론된 형태는 랭크를 알고 있는 경우도 있고 그렇지 않는 경우도 있음.
          • 만약에 랭크를 알고 있는 경우라도 각 차원의 원소 개수를 알고 있는 경우도 있고 그렇지 않는 경우도 있음.
        • Shape의 형태
        • 랭크 형태 차원 예제
          0 [] 0-차원 스칼라인 0-차원 텐서.
          1 [D0] 1-차원 형태가 [5]인 1-차원 텐서.
          2 [D0,D1] 2-차원 형태가 [3, 4]인 2-차원 텐서.
          3 [D0,D1,D2] 3-차원 형태가 [1, 4, 3]인 3-차원 텐서.
          n [D0,D1,.....Dn-1] n-차원 형태가 [D0, D1, ... Dn-1]인 텐서.
      • Type
        • 텐서 값이 어떤 타입인지를 의미함.
        • Type의 형태
          • 데이터 타입 이름 Python 데이터 타입 설명
            DT_FLOAT tf.float32 32bit 부동소수점 숫자
            DT_DOUBLE tf.float64 64bit 부동소수점 숫자
            DT_INT8 tf.int8 8bit 정수
            DT_INT16 tf.int16 16bit 정수
            DT_INT32 tf.int32 32bit 정수
            DT_INT64 tf.int64 64bit 정수
            DT_UINT8 tf.uint8 8bit 부호 없는 정수
            DT_UINT16 tf.uint16 16bit 부호 없는 정수
            DT_STRING tf.string 가변길이 바이트 배열이며, 텐서의 각 요소는 바이트의 배열
            DT_BOOL tf.bool 참/거짓 값
            DT_COMPLEX64 tf.complex64 2개의 32bit 부동소수점 숫자로 구성된 복소수로 각각 실수부와 허수부로 이루어짐
            DT_COMPLEX128 tf.complex128 2개의 64bit 부동소수점 숫자로 구성된 복소수로 각가 실수부와 허수부로 이루어짐
            DT_QINT8 tf.qint8 양자화 연산에 사용되는 8bit 정수
            DT_QINT32 tf.qint32 양자화 연산에 사용되는 32bit 정수
            DT_QUINT8 tf.quint8 양자화 연산에 사용되는 8bit 부호 없는 정수
  • 그래프(Graph)
    • 그래프 구조는 아래 구성요소로 이루어짐.
      • 노드(Node) 
        • 연산을 의미함
          • ex) 곱하기, 나누기 등등
      • 엣지(Edge)
        • 텐서(Tensor)를 의미함
    • 텐서플로우는 그래프 구조를 통해서 데이터를 분석함.
    • Data Flow Graph Computation 이라고 불리고 노드에 지정된 연산을 시행하는 구조로 이루어짐.
    • 실습 및 예시
    • 아나콘다 프롬프트
      • 가상환경 접속 및 Jupyter notebook 실행
      • 예시
      • 코드
        • 실행 화면(Jupyter notebook)
        • 설명
          • 정상적으로 결과값이 65가 나옴을 확인할 수 있음.
  • 연산자
    • 생성된 데이터의 산술연산(덧셈,뺄셈등등)을 위한 매개변수 
    • 텐서플로우 연산 축약형 연산자 설명
      tf.add() a+b a와 b를 더함
      tf.multiply() a*b a와 b를 곱함
      tf.subtract() a-b a에서 b를 뺌
      tf.divide() a/b a를 b로 나눔
      tf.pow() a**b a의 b의 제곱을 계산함
      tf.mod() a%b a를 b로 나눈 나머지
      tf.logical_and() a&b a와b의 논리곱을 구함
      tf.greater() a>b a>b 의 참 거짓 반환
      tf.greater_equal() a>=b a>=b 의 참 거짓 반환
      tf.less_equal() a<=b a<=b 의 참 거짓 반환
      tf.less() a<b a<b 의 참 거짓 반환
      tf.negative() -a a의 반대 부호 값을 반환
      tf.logical_not() ~a a의 각 원소의 반대의 참 거짓값을 반환
      tf.abs() abs(a) a의 각 원소의 절대값을 반환
      tf.logical_or() a|b a와b의 논리합을 구함
  • 변수
    • 모델 학습 시 매개변수의 업데이터와 유지를 위해 사용함.
      • 즉, 알고리즘 학습 시 반복에 따라 값이 변하는 것을 표현하는 데이터 형
    • 변수는 프로그램에 의해 변화하는 공유된 지속 상태를 표현하는 방법
      • tf.Variable 클래스에서 처리됨. 

        • 하나의 tf.Variable 은 하나의 텐서를 표현하며, 텐서값은 텐서에 연산을 수행하여 변경시킬 수 있음.

        • 그리고, 특정한 연산은 이 텐서값을 읽고 수정함. 

        • tf.keras 같은 좀 더 고수준의 라이브러리는 모델 파라미터를 저장하는데 tf.Variable을 사용함

    • 변수의 생성 및 사용

      • 코드
        • 실행화면
          • 설명
            • 생성
              • 위와같이 변수를 생성하려면 단순하게 초기값을 설정하면됨.
            • 사용
              • assign_add 함수를 통해서 변수에 1을 더함.
            • 해제
              • tf.Variable에 마지막 참조가 범위(scope)에서 벗어났을때 메모리가 해제됨.

결론

  • 지금까지 텐서플로우의 기초지식인 텐서/그래프/연산자/변수에 대해서 알아봄.
  • 기초지식을 알아보면서, 예전에 잠시 텐서플로우를 공부했던 기억이 있는데, 이번에 다시 새로 시작하면서
    • 텐서플로우v1 -> 텐서플로우v2 가 되면서 바뀐것이 있음을 알게됨.
      • 세션도 사라짐
      • 플레이스 홀더도 사라짐.
    • 암튼 조금씩 공부하다보면, 또 바뀐것도 알겠지.
      • 역시 IT는 공부만이 살길 같음. 이번에 느낀것은 예전에 공부해서 알았던 지식이 버전업이 되면서 거짓이 될수도...
  • 아무튼 오늘도, 텐서플로우 관련 기초지식에 대해서 정리 및 지식 획득! 감사합니다.

 

728x90
300x250