딥러닝 프레임워크 텐서플로우

하루하루 개발일기·2021년 11월 27일
0

인공지능

목록 보기
19/20

텐서플로우

  • Google에서 공개한 오픈소스 라이브러리
    • 파이썬/C++ API을 이용해 쉽게 사용가능
    • 원래 많은 수치 계산을 효과적으로 지원하기 위해 개발됨
    • 현재는 기계학습과 딥러닝 응용 시스템을 개발하는데 널리 활용
    • 실제 내부 코드는 C/C++로 개발되어 컴파일 속도 빠름
    • CPU, GPU, 안드로이드 모바일 운영체제에서도 사용가능
  • 데이터 플로우 그래프를 이용하여 계산과정과 모델을 표현
  • 기계학습 알고리즘을 구현하고 실행하기 위한 프로그래밍 인터페이스
  • 신경망과 딥러닝 관련 라이브러리 제공
    • 그레디언트 기반의 학습 알고리즘 사용
    • 다양한 최적화 모듈 제공

데이터 플로우 그래프

  • 텐선플로우 프로그램을 통하여 수행되는 일련의 계산을 정의
    • 노드: 수학적 연산
    • 간선: 노드 사이에 전달되는 데이터 배열(텐서)
  • Operation
    • Op로도 불린다
    • 하나 이상의 텐서를 받아 계산을 수행하고 결과를 하나 이상의 텐서로 변환
  • Tensor
    • 모든 데이터는 텐서를 통해 표현
    • 다차원 배열
  • Session
    • 그래프를 실행하기 위해 세션 객체 필요
  • Variables
    • 그래프 실행 시 파라미터를 저장하고 갱신하기 위해 사용

변수와 플레이스홀더

  • Variable
    • 모델의 학습 가능한 변수를 정의할 때 Variable을 사용함
    • 가중치, 편향 등의 파라미터를 저장하는 데 사용
    • 정의할 때 반드시 초기화 되어야 함
  • Placeholder
    • 데이터플로우 그래프 실행 시 데이터를 전달하기 위해 사용
    • 그래프 실행 시 값이 제공되어야 함

텐서보드

  • Tensorboard
    • 텐서플로우에서 제공하는 시각화도구
    • 데이터플로우 그래프, 학습 과정의 성능 변화 등을 보여줄 수 있음
    • 프로그램 실행 중 해당 정보를 로그 파일에 저장

텐서

  • 텐서플로우에서 사용하는 기본 자료형인 다차원 배열
    • rank, shape, type의 세가지 속성을 가짐
    • rank: 텐서의 차원수(dimension, order, degree 라고도 함)
      • rank 0 텐서 - 스칼라값
      • rank 1 텐서 - 1차원 배열 (rank 0 텐서의 배열)
      • rank 2 텐서 - 2차원 배열 (rank 1 텐서의 배열)
      • rank n 텐서 - n 텐서 (rank n-1 텐서의 배열)
    • shape: 텐서의 구조
    • type : 텐서 구성원소의 자료형

텐서의 변환 연산

텐서의 정보를 얻거나 형태를 변환하는 여러 함수

예: 텐서 a와b

shape, size, rank

reshape

텐서의 기존의 원소를 새로운 shape에 따라 원소 배치
reshape(텐서, shape)

squeeze

텐서에서 크기가 1인 축을 제거 -> 크기가 1인 것은 차원이 무의미하기 때문
squeeze(텐서)

expand_dims

지정한 축의 위치에 차원 추가
expand_dims(텐서, 확장축) - 축의 인자는 0부터 시작

slice

텐서에서 일부분 선택

split

지정된 축을 따라 하나의 텐서를 주어진 개수의 부분 텐서로 분리
split(텐서, 텐서분할갯수, 축)

concat

한 축을 기준으로 두 텐서를 이어 붙임
concat([텐서1, 텐서2], 차원) - 시작위치는 0부터 시작

reverse

텐서의 축을 기준으로 원소를 역순으로 배열
reverse(텐서, [축])

transpose

텐서의 지정된 축을 지정된 순서로 바꿈
transpose(텐서, {perm=[축의 순열]})
-> {perm=[축의 순열]}이 없으면 perm=[1,0]으로 간주

gather

지정된 첨자의 원소들로 이루어진 텐서를 생성
gather(텐서, [첨자(들)]

one-hot

정수값을 one-hot 벡터로 변환
one_hot(텐서, depth=전체원소의 가지수)

profile
개발자로 공부하며 느낀 여러가지 경험들

0개의 댓글