OneBook(Python & Deep Learning)
  • 한곳에서 끝내는 파이썬 & 머신러닝 & 딥러닝
  • 문서 작업을 시작하며
  • 1. 인공지능(Artificial Intelligence) 시대
    • 1.1. 인공지능이란 도대체 무엇인가?
    • 1.2. 4차 산업혁명
    • 1.3. 인공지능의 역사
    • 1.4. 인공지능 > 머신러닝 > 딥러닝
    • 1.5. 머신러닝
    • 1.6. 머신러닝 알고리즘
      • 1.6.1. 지도 학습 (Supervised Learning)
      • 1.6.2. 비지도 학습 (Unsupervised learning)
      • 1.6.3. 강화 학습(Reinforcement Learning)
    • 1.7. 인공신경망(ANN)
    • 1.8. 딥러닝
  • 2. 기본 상식
    • 2.1. 기본 용어의 이해
      • 2.1.1. CPU와 GPU의 차이
      • 2.1.2. 오픈소스(Open Source)
      • 2.1.3. 깃허브(GitHub)
      • 2.1.4. 위키 Wiki
      • 2.1.5. 아나콘다(Anaconda)
      • 2.1.6. 활성화 함수
      • 2.1.5. 딥러닝 프레임워크 소개
    • 2.2. 텐서플로(Tensorflow)
    • 2.3. 케라스(Keras)
    • 2.4. 파이토치(PyTorch)
    • 2.5. 학습에 필요한 중요한 도구와 라이브러리들
      • 2.5.1. 주피터 노트북(Jupyter Notebook)
      • 2.5.2. 파이참(PyCharm)
      • 2.5.3. 스파이더(Spyder)
      • 2.5.4. 넘파이(NumPy)
      • 2.5.5. 싸이파이(SciPy)
      • 2.5.6. Matplotlib
      • 2.5.7. 판다스(Pandas)
      • 2.5.8. 장고(Django)
      • 2.5.9. 파이큐티(pyQT)
      • 2.5.10. 싸이킷런(Scikit-learn)(Sklearn)
      • 2.5.11. CUDA & cuDNN
      • 2.5.12. 파이썬 표준 내장 라이브러리
    • 2.6. AI공부에 필요한 기본지식 3가지
      • 2.6.1. 수학
      • 2.6.2. 프로그래밍 기술
      • 2.6.3. AI의 적용 대상 산업에 대한 지식
  • 3. 개발 환경설정
    • 3.1. 윈도우 환경에서 설치하기
      • 3.1.1. 아나콘다 설치 (파이썬 설치)
        • 1) 아나콘다 패키지 업데이트
        • 2) conda에서 파이썬 가상 환경 (virtual environments) 생성하기
        • 3) NVIDIA GPU 환경 설정하기
      • 3.1.2. 텐서플로 설치
      • 3.1.3. 케라스 설치
      • 3.1.4. Jupyter Notebook 설치
      • 3.1.5. Visual Studio Code 설치
      • 3.1.6. 파이참 설치
        • 1) 파이참 가상환경 설정
        • 2) 파이참 환경 설정
        • 3) 설치된 라이브러리들의 버전 확인 하기
    • 3.2. 리눅스 환경에서 설치하기
      • 3.2.1. 아나콘다 설치(파이썬 설치)
      • 3.2.2. 텐서플로 설치
      • 3.2.3. 케라스 설치
      • 3.2.4. 장고 설치
      • 3.2.5. 파이참(PyCharm) 설치
        • 1) 파이참 가상환경 설정
  • 4. 파이썬 기초 학습
    • 4.1. 파이썬(Python)
    • 4.2. 파이썬의 특징
    • 4.3. 파이썬 기본 문법
      • 4.3.1. 대화형과 스크립트 모드 프로그래밍
      • 4.3.2. 모듈의 사용(import)
      • 4.3.3. 파이썬 식별자(Identifiers)
      • 4.3.4. 예약어(Reserved Words)
      • 4.3.5. 행(Lines)과 들여쓰기(Indentation)
      • 4.3.6. 문자열 표시
      • 4.3.7. 주석
      • 4.3.8. 파이썬 변수(Variables)
    • 4.4. 자료형과 연산자
      • 4.4.1. 자료형
      • 4.4.2. 파이썬 연산자
    • 4.5. 조건문과 반복문
      • 4.5.1. 조건문
      • 4.5.2. 반복문
    • 4.6. 함수
      • 4.6.1. 함수의 종류
    • 4.7. 모듈(Modules)
      • 4.7.1. 모듈의 참조 위치
      • 4.7.2. 네임스페이스(Namespace)와 범위(Scoping)
      • 4.7.3. dir( ) 함수
      • 4.7.4. 패키지(Packages)
      • 4.7.5. 기본 내장 모듈
    • 4.8. 숫자형 활용
      • 4.8.1. 실습: 계산기 만들기
    • 4.9. 문자열(Strings) 활용
      • 4.9.1. Unicode 한글의 사용
      • 4.9.2. 이스케이프 문자
      • 4.9.3. 문자열 연산자
      • 4.9.4. 문자열 포맷 연산자
      • 4.9.5. 내장 문자열 함수
    • 4.10. 시퀀스(Sequence) 자료형 활용
      • 4.10.1. 리스트(Lists)
      • 4.10.2. 튜플(Tuple)
      • 4.10.3. 딕셔너리(Dictionary)
    • 4.11 Class
    • 4.12. Date & Time
    • 4.13. 파이썬 에러처리
  • 5. 기초수학
  • 6. 머신러닝을 위한 파이썬
  • 7. 텐서플로 2.x
  • 8. 딥러닝을 이용한 자연어 처리 입문
  • 9. 파이토치로 시작하는 딥 러닝 입문
  • 9.6 6. Pytorch lightning
  • A1. 필수 학습 라이브러리들
    • 4.1 NumPy
      • 4.1.1. Basic Operations
      • 4.1.2. Indexing, Slicing 그리고 Iterating
      • 3.13.3. Shape Manipulation
    • 4.2 Matplotlib
    • 4.3 SciPy
      • 4.3.1. Interpolation
      • 4.3.2. Optimization
      • 4.3.3. Fast Fourier transforms: scipy.fftpack
    • 4.4 Pandas
      • 4.4.1 Pandas 자료구조
      • 4.4.2 Pandas 활용하기
  • A2. 머신러닝 & 딥러닝
    • 5.1. 머신러닝 개념 소개
      • 5.1.1. 경사하강법(Gradient Descent )
      • 5.1.2. 분류 (Classification)
      • 5.1.3. MNIST Dataset 소개
    • 5.2. 딥러닝 개념 소개
      • 5.2.1. 퍼셉트론
      • 5.2.2. 인공 신경망
      • 5.2.3. 대표적인 딥러닝 모델
    • 5.3. Tensorflow를 사용한 학습
      • 5.3.1. TensorFlow 기본 메커니즘
      • 5.3.2. Tensorflow Types
      • 5.3.3. 기본 동작 실습
      • 5.3.4. 선형 회귀
      • 5.3.5 로지스틱 회귀
    • 5.4. Keras를 사용한 학습
      • 5.4.1. Keras로 분석한 선형 회귀
      • 5.4.2. CNN(Convolutional Neural Network)
      • 5.4.3. Fashion MNIST with Keras
    • 5.5. 웹 크롤링
      • 5.5.1. requests와 BeautifulSoup으로 웹 크롤러 만들기
Powered by GitBook
On this page

Was this helpful?

  1. A2. 머신러닝 & 딥러닝
  2. 5.3. Tensorflow를 사용한 학습

5.3.1. TensorFlow 기본 메커니즘

Previous5.3. Tensorflow를 사용한 학습Next5.3.2. Tensorflow Types

Last updated 6 years ago

Was this helpful?

TensorFlow 런타임 환경의 기본 요소인 graphs, sessions에 대해 설명합니다.

1) Graphs

텐서플로우를 실행하려면 다음의 과정을 따라야 합니다.

TensorFlow 프로그램은 크게 두 가지 단계로 구성되어 있습니다. 구성 단계에서는 graph를 조립하고, 실행 단계에서는 session을 이용해 graph의 연산을 실행합니다.

Tensorflow에 대한 가장 큰 아이디어는 모든 수치 계산이 graph로 표현된다는 것입니다. 즉, Tensorflow 프로그램의 기본 골격은 graph입니다. graph는 모델의 작업을 나타내는 노드 배열입니다.

먼저 노드와 연산이 무엇을 의미하는지 봅시다. 그것을 설명하는 가장 좋은 방법은 간단한 예를 보는 것입니다. 함수 “f (x, y) = x ^ 2y + y + 2”의 코드를 작성하려고 가정 해 봅시다. TensorFlow의 graph는 다음과 같습니다.

위의 그림처럼 그래프는 Edge에 의해 서로 연결되어있는 일련의 Node들로 구성됩니다. graph의 각 노드는 op (operation)라고합니다. 따라서 우리는 “텐서(변수, 상수)” 또는 “텐서에 대한 연산(수학 연산)”을 위해 각 연산에 대해 하나의 노드를 갖습니다. 각 노드는 0개 이상의 텐서를 입력으로 사용하고 0개 이상의 텐서를 출력으로 생성합니다.

operation "Add" 코드를 다음의 코드로 테스트 해 봅시다.

import tensorflow as tf
a = 2
b = 3
c = tf.add(a, b, name='Add')
print(c)

이 코드의 결과는 다음과 같습니다.

Tensor("Add:0", shape=(), dtype=int32)

위의 코드로 생성된 그래프와 변수들은 다음과 같습니다.

위의 코드는 두 개의 입력 노드 (a = 2 및 b = 3)와 하나의 출력 노드(Add)를 만듭니다. 변수 c (즉 덧셈 연산의 출력 Tensor)를 출력하면 Tensor 정보만 출력됩니다. 그 이름 (Add), shape()는 스칼라를 의미하고 int32는 type (32-bit integer)을 의미합니다. 그러나 2 + 3 = 5라는 계산 결과를 출력하지는 않았습니다 (2 + 3 = 5). 왜 그럴까요?

TensorFlow 프로그램은 두 가지 단계로 구성되어 있다고 이야기했습니다. 첫 번째 단계는 graph를 만들고 노드를 평가하는 것이고 두번째 단계로 session에서 계산 graph를 실행해야합니다. 간단히 말하면, 작성된 코드는 예상되는 Tensors의 크기와 실행되는 작업만 결정하는 graph를 생성한 것입니다. 그러나 Tensor에 숫자 값을 지정하지 않습니다. 즉, TensorFlow는 session에서 지정하지 않는 한 graph를 실행하지 않습니다. 따라서 이러한 값을 할당하고 graph를 통해 흐름(Flow)을 만들려면 session을 만들고 실행해야합니다.

위의 코드를 의도한 대로 실행 하려면 다음과 같이 코드를 수정해야 합니다.

import tensorflow as tf
a = 2
b = 3
c = tf.add(a, b, name='Add')
sess = tf.Session()
print(sess.run(c))
sess.close()

TensorFlow graph는 Python의 함수 정의와 같습니다. 함수 정의에 실행 결과가없는 것처럼 계산을 수행하지 않습니다.

2) Session

빌드 준비가 끝나고 모든 op들도 생성되면 graph를 실행하기 위해 session을 생성해야 합니다. 무엇이든 계산하려면 session에서 graph를 실행해야 합니다. 기술적으로 session은 CPU 또는 GPU와 같은 하드웨어에 graph 작업을 배치하고 이를 실행하는 메소드를 제공합니다. 예제에서 graph를 실행하고 c의 값을 얻으려면 다음 코드가 session을 만들고 'c'를 실행하여 graph를 실행합니다.

sess = tf.Session()
print(sess.run(c))
sess.close()

먼저 실습한 코드 하단에 위의 코드를 추가해야 우리가 원하는 “5”라는 결과를 얻을 수 있습니다.

이 코드는 session 객체(sess에 할당됨)를 생성한 다음 (두 번째 행) run 메소드를 호출하여 c를 평가할 수있는 계산 graph를 실행합니다. 이것은 c의 값을 얻는데 필요한 graph만 실행한다는 것을 의미합니다. session이 끝나면 session을 닫는 것을 잊지 마십시오. 위의 코드에서 마지막 줄은 session을 닫는 것입니다.

다음 코드는 동일한 작업을 수행하며 일반적으로 많이 사용됩니다. 유일한 차이점은 자동으로 닫히기 때문에 마지막에 세션을 닫을 필요가 없다는 것입니다.

with tf.Session() as sess:
    print(sess.run(c))

명확하게 설명하기 위해 "Python-name"과 "TensorFlow-name" 으로 분리해서 설명해 보겟습니다.

이 코드에서는 a, b 및 c의 "Python Name"로 3 개의 변수를 생성했습니다. 여기서 a와 b는 "Python Name"이므로 "TensorFlow-name"이 없습니다. c는 "TensorFlow-name"으로 Add가 있는 Tensor입니다. 이상적인 Tensorflow 경우, tf.add ()는 "TensorFlow-name"이 정의된 두 개의 Tensors를 입력합니다 (이 이름은 Python-name과 별개입니다). 예를 들어, c = tf.add (a, b, name = 'Add') 를 쓰면 실제로 파이썬 이름이 c이고 TensorFlow 이름이 Add 인 변수 (또는 Tensor)가 생성됩니다.

위의 코드에서 Python Name (a,b)만 있는 두 개의 Python 변수 (a = 2 및 b = 3)를 전달했지만 TensorFlow Name은 없습니다. TensorFlow는 그래프를 시각화하기 위해 TensorFlow Name을 사용합니다. a와 b에는 TensorFlow Name이 없으므로 기본 이름인 x와 y를 사용합니다.

조금더 복잡한 예제를 살펴봅시다.

import tensorflow as tf
x = 2
y = 3
add_op = tf.add(x, y, name='Add')
mul_op = tf.multiply(x, y, name='Multiply')
pow_op = tf.pow(add_op, mul_op, name='Power')
useless_op = tf.multiply(x, add_op, name='Useless')
with tf.Session() as sess:
    pow_out, useless_out = sess.run([pow_op, useless_op])
    print("Power=",pow_out)
    print("Useless=", useless_out)

위의 예제에서 생성되는 그래프와 정의되는 변수들은 다음과 같습니다.

이 graph가 session에 주어지고 pow_op 연산을 가져오면 먼저 add_op와 mul_op를 실행하여 출력 tensor를 구한 다음 pow_op을 실행하여 필요한 출력 15625을 구합니다.

  • add_op → 2+3 = 5

  • mul_op → 2*3 = 6

  • pow_op → 5의 6승 = 15625

이렇게 단계적으로 실행하는 것은 graph를 정의한 다음 그것을 session에서 실행하는 장점 중 하나입니다. 그래프의 필수 연산 만 실행하고 나머지는 건너 뜁니다. 이것은 수백, 수천 개의 작업으로 거대한 네트워크를 처리할 때 많은 시간을 절약합니다.

Reference :

https://www.easy-tensorflow.com/tf-tutorials/basics/graph-and-session