[머신러닝을 위한 파이썬 한 조각] - CH.10 텐서플로 (TensorFlow)

Jeonghwan Kim·2022년 7월 7일
0

CH.10 텐서플로 (TensorFlow)

  • TensorFlow: 텐서(Tensor)를 흘려보내면서(Flow) 머신러닝과 딥러닝 알고리즘을 수행하는 라이브러리
    • 숫자 (스칼라 또는 rank 0 텐서)

    • 1차원 배열 [ 1, 2 ] (벡터 또는 rank 1 텐서)

    • 2차원 배열 [ [1,2], [3,4] ] (행렬 또는 rank 2 텐서)

    • 3차원 배열 [ [ [1,2] ], [ [3, 4] ] ] (텐서 또는 rnk3 텐서)

      → 스칼라부터 벡터, 행렬, 텐서 등 모든 데이터는 텐서로 취급함

  • 텐서들은 그래프 구조에서 노드에서 노드로 흘러감 (Flow)
  • 텐서플로를 이용한 프로그램 작성 시,
    1. 상수, 변수, 텐서연산 등의 노드와 엣지를 먼저 정의하고,
    2. 세션을 만들고 그 세션을 통해 노드간의 데이터(텐서) 연산 수행
  • 상수노드
    • 상수 값을 저장하는 노드를 만들기 위해 tf.constant로 상수노드 정의
    • 세션을 만들지 않고 print와 같은 명령문을 실행하면 노드에 저장된 값이 아닌 현재 정의되어 있는 노드의 상태(노드타입, shape 등)가 출력됨
    • 노드간의 연산을 위해 tf.Session()으로 세션을 생성함
    • 세션을 통해 see.run()노드에 값이 할당되고 노드간의 텐서를 흘려보내면서 연산과 명령문 등이 실행됨
    • 마지막엔 see.close()를 통해 생성된 세션을 닫아줌
  • 플레이스홀더노드
    • 머신러닝/딥러닝에서 입력데이터(input), 정답데이터(target)를 넣어주기 위한 용도로 주로 사용됨
    • 텐서플로에서는 임의의 값을 입력으로 받기 위해 플레이스홀더 노드 tf.placeholder 정의
    • sess.run 첫번째 인자로 실행하고자하는 연산을 넣고, 두번째 인자로 실제로 넣을 값을 Dictionary 형태로 넣어주는 feed_dict를 선언하고, feed_dict 부분에 플레이스홀더에 넣을 값을 지정해줌
  • 변수노드
    • 가중치나 바이어스처럼 계속 업데이트되는 변수는 텐서플로에서 변수노드 tf.Variable 정의
    • 변수노드 값 초기화를 위해서 반드시 tf.global_variables_initializer() 실행
    • 변수노드 값을 업데이트함
  • TensorFlow Linear Regression 정의 부분 구조
  • TensorFlow 노드/연산 실행
    • with 구문은 자동으로 열려있는 resource를 닫아주는 기능이 있어 sess.close()를 안해주어도 자동으로 닫아줌
  • TensorFlow에서는 은닉층에서 결과값을 나타낼 때 sigmoid보다 relu, 출력층에서 sigmoid보다 softmax를 사용함
    • vanishing gradient(경사도)가 사라지는 문제를 완하시킬 수 있기에 sigmoid보다 relu를 사용함
    • relu는 0보다 작은 입력값이 들어오면 0으로 내보내고, 0보다 큰 입력값은 입력값을 그대로 내보내줌
    • sofrmax 함수 출력은 0과 1 사이 값이고, 모두 더하면 1이 됨, 각각의 값이 정답일 확률을 나타내는 것

0개의 댓글