본문 바로가기

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

12.tensorflow, 텐서(Tensor)에 대해서 알아보자.

반응형

블로그 목적

  • 텐서(Tensor)의 자료구조 및 1차/1차/3차 텐서에 대해서 알아본다.

텐서의 자료구조에 대해서 알아보자.

  • 텐서란?
    • 텐서플로의 기본자료구조를 말함.
      • 다차원 배열 or 리스트로 구성되어 있는 단순한 구조.
    • 그리고, 데이터 플로우 그래프에서 엣지를 연결함.
  • 텐서를 구분하는 3가지 요소
    • Rank
      • 텐서의 차원을 나타냄.
        • 즉, Rank 가 N인 텐서는 N차원 행렬을 나타냄.
          • ex) Rank 2의 텐서(=행렬) / Rank 1의 텐서(=벡터)
    • Shape
      • 텐서의 행/열이 몇개인지 나타냄.
    • Type
      • 텐서의 데이터의 형식을 나타냄.
  • 그럼, 텐서는 어떻게 만들까?
    • 하나, NumPy 등을 이용한 N차원 배열을 만드는 방법
    • 둘, N차원 배열을 텐서플로 텐서로 변환하는 방법
    • 다시말해서, 텐서로 변환된 이후에 텐서플로로 연산이 가능함.

그럼, 1차원 텐서에 대해서 알아보자.

  • 1차원 텐서를 생성하기 위해서 해야할 일은?
    • Numpy 의 array(s) 명령어를 이용.
    • 예시
      • 실행화면(jupyter notebook)
        • 설명
          • 쉼표(,) 로 구분하지 않음 (python 리스트와 다른점)
          • 인덱스의 시작은 0
          • 차원 조회시 (4,) 의 의미하는 것은, 하나의 행에 4개의 열이 있다는 의미임.
  • 그럼, Numpy 배열을 텐서플로의 텐서로 변환해보자.
    • 예시
      • 실행화면(jupyter notebook)
        • 설명
          • 텐서플로의 convert_to_tensor 함수
            • 다양한 종류의 python 객체를 텐서플로의 텐서 형식으로 변환해주는 함수
              •  Numpy 배열, python 리스트, python 스칼라 자료구조 등등

그럼, 2차원 텐서에 대해서 알아보자.

  • 2차원 텐서 or 행렬을 만들기 위해서는 ?
    • 배열의 배열을 이용함.
      • 명령어는 1차원 텐서와 동일하게 array(s)를 사용함.
    • 예시
      • 실행화면(jupyter notebook)
      •  설명
        •  ts_2d[row, col] 을 통해서 해당 행렬의 값을 얻어올 수 있음.
  • 그럼, 텐서 자료 구조로 변환해보자.
    • 예시
      •  실행화면
        • 설명
          • 텐서플로의 constant 명령어를 사용해 자료구조를 변환할 수 있음.
          • 텐서플로의 add 명령을 통해서 덧셈 결과를 반환함.
          • 그 외의 주요 산술연산 정리 
            • tf.sub 
              • 뺄셈결과를 반환한다.
            • tf.mul
              • 곱셈결과를 반환한다.
            • tf.div
              • 나눗셈결과를 반환한다.
            • tf.mod
              • 나머지 연산(모듈러)결과를 반환한다.
            • tf.abs
              • 절대값을 반환한다.
            • 기타 등등 다양한 산술연산을 지원하며, 할수 있음.

마지막으로, 3차원 텐서에 대해서 알아보자.

  • 보통 3차원 텐서는 이미지 처리에서 주로 사용하는 구조.
    • 이미지 배열은 M X N X 3 크기로 구성되어 있는 3차원 텐서
      • 3은 각각 빨간색(R) / 초록색(G) / 파란색(B)을 의미하는 RGB 색역을 의미함.
    • 예시
      • 실행화면
          • 설명
            • (2,2,2) 는 2X2X2크기의 행렬을 의미함 
              • 평면(plane) / 행(row) / 열(column)을 의미함.
  • 그럼, matplotlib 을 통해서 컬러이미지(T.hub)를 불러오고, 텐서 플로를 이용해 이미지를 변형해보자.
    • 예시
        • 원본 이미지

      • 실행화면(Jupyter notebook)
          • 설명
            • matplotlib 을 통해서, 이미지를 불러올 수 있음.
              • imread 명령어를 이용하면, 표준형식(JPG, BMP, TIF)의 컬러 이미지파일을 불러옴.
            • 텐서플로의 slice 함수를 통해서 이미지를 잘라볼 수 있음.
            • 텐서플로의 transpose 함수를 통해서 전치된 이미지(전치 행렬)을 구할 수 있음
  • 결론

    • 텐서는 텐서플로의 기본자료구조를 말함.
      • 다차원 배열 or 리스트로 구성되어 있는 단순한 구조.
      • 그리고, 데이터 플로우 그래프에서 엣지를 연결함.
    • 텐서를 구분하는 3가지 요소는 Rank/Shape/Type 으로 구성됨.
    • 오늘도 텐서에 대한 지식 획득 및 공유 성공! 감사합니다.
728x90
300x250