텐서플로우란 무엇입니까? 어떻게 작동하나요? 소개 & Archi강의

TensorFlow 소개로 이 튜토리얼을 시작해 보겠습니다.

텐서플로우란?

TensorFlow 머신 러닝 애플리케이션을 만드는 오픈 소스 엔드투엔드 플랫폼입니다. 데이터 흐름과 미분 가능 프로그래밍을 사용하여 딥 신경망의 훈련과 추론에 초점을 맞춘 다양한 작업을 수행하는 기호 수학 라이브러리입니다. 개발자는 다양한 도구, 라이브러리 및 커뮤니티 리소스를 사용하여 머신 러닝 애플리케이션을 만들 수 있습니다.

현재 세계에서 가장 유명한 딥러닝 라이브러리는 Google의 TensorFlow입니다. Google 제품은 검색 엔진, 번역, 이미지 캡션 또는 추천을 개선하기 위해 모든 제품에서 기계 학습을 사용합니다.

TensorFlow 예

구체적인 예를 들자면 구글 사용자들은 AI를 통해 더욱 빠르고 세련된 검색 경험을 경험할 수 있다. 사용자가 검색창에 키워드를 입력하면 Google은 다음 단어가 무엇인지 추천해 줍니다.

TensorFlow 예
TensorFlow 예

Google은 머신러닝을 사용하여 대규모 데이터 세트를 활용하여 사용자에게 최고의 경험을 제공하고자 합니다. 세 가지 다른 그룹이 머신러닝을 사용합니다.

  • 연구원
  • 데이터 과학자
  • 프로그래머

그들은 모두 동일한 도구 세트를 사용하여 서로 협력하고 효율성을 향상시킬 수 있습니다.

Google에는 데이터만 있는 것이 아닙니다. 그들은 세계에서 가장 거대한 컴퓨터를 보유하고 있으므로 Tensor Flow는 확장 가능하도록 구축되었습니다. TensorFlow는 기계 학습 및 심층 신경망 연구를 가속화하기 위해 Google Brain Team에서 개발한 라이브러리입니다.

여러 CPU 또는 GPU, 심지어 모바일 운영 체제에서도 실행되도록 구축되었으며 다음과 같은 여러 언어로 된 여러 래퍼가 있습니다. Python, C++ or Java.

텐서플로우의 역사

몇 년 전, 딥 러닝은 방대한 양의 데이터를 제공할 때 다른 모든 머신 러닝 알고리즘보다 성능이 뛰어나기 시작했습니다. Google은 이러한 딥 신경망을 사용하여 서비스를 개선할 수 있다는 것을 알게 되었습니다.

  • Gmail
  • 사진
  • Google 검색 엔진

그들은 다음과 같은 프레임워크를 구축합니다. 텐서 플로우 연구원과 개발자가 AI 모델에 대해 함께 작업할 수 있도록 합니다. 일단 개발되고 확장되면 많은 사람들이 사용할 수 있습니다.

2015년 말에 처음 공개되었으며, 첫 번째 안정 버전은 2017년에 나타났습니다. 이는 Apache 오픈 소스 라이선스에 따른 오픈 소스입니다. Google에 비용을 지불하지 않고도 유료로 사용하고 수정하고 수정된 버전을 재배포할 수 있습니다.

TensorFlow 딥러닝 튜토리얼의 다음 부분에서는 TensorFlow 아키텍처와 TensorFlow의 작동 방식에 대해 알아보겠습니다.

TensorFlow 작동 방식

TensorFlow를 사용하면 Tensor라는 다차원 배열로 입력을 받아 그래프에서 데이터가 어떻게 이동하는지 정의하는 데이터 흐름 그래프와 구조를 구축할 수 있습니다. 이를 통해 이러한 입력에서 수행할 수 있는 작업의 흐름도를 구성할 수 있으며, 이는 한쪽 끝에서 시작하여 다른 쪽 끝에서 출력으로 나옵니다.

TensorFlow Archi강의

Tensorflow 아키텍처는 세 부분으로 구성됩니다.

  • 데이터 전처리
  • 모델 구축
  • 모델 학습 및 추정

입력을 다차원 배열로 취하기 때문에 Tensorflow라고 합니다. 텐서. 당신은 일종의 구성을 할 수 있습니다 순서도 해당 입력에 대해 수행하려는 작업(그래프라고 함)입니다. 입력은 한쪽 끝에서 입력되고, 그런 다음 여러 작업의 이 시스템을 거쳐 다른 쪽 끝에서 출력으로 나옵니다.

텐서플로우라는 이름이 붙은 이유는 텐서가 들어가서 연산 목록을 거쳐 반대편으로 나오기 때문입니다.

Tensorflow는 어디에서 실행될 수 있나요?

TensorFlow 하드웨어 및 소프트웨어 요구 사항 분류 할 수 있습니다

개발 단계: 모드를 훈련하는 단계입니다. 교육은 일반적으로 데스크톱이나 노트북에서 수행됩니다.

실행 단계 또는 추론 단계: 훈련이 완료되면 Tensorflow는 다양한 플랫폼에서 실행될 수 있습니다. 당신은 그것을 실행할 수 있습니다

  • 데스크톱 실행 중 Windows, macOS 또는 리눅스
  • 웹 서비스로서의 클라우드
  • iOS와 같은 모바일 장치 및 Android

여러 컴퓨터에서 학습한 다음 학습된 모델이 있으면 다른 컴퓨터에서 실행할 수 있습니다.

이 모델은 CPU뿐만 아니라 GPU에서도 훈련 및 사용할 수 있습니다. GPU는 원래 비디오 게임용으로 설계되었습니다. 2010년 후반에 스탠포드 연구원들은 GPU가 행렬 연산과 대수에도 매우 뛰어나서 이런 종류의 계산을 하는 데 매우 빠르다는 것을 발견했습니다. 딥 러닝은 많은 행렬 곱셈에 의존합니다. TensorFlow는 행렬 곱셈을 계산하는 데 매우 빠릅니다. C++. 에서 시행되고 있지만 C++, TensorFlow는 주로 다른 언어로 접근하고 제어할 수 있습니다. Python.

마지막으로 TensorFlow의 중요한 기능은 TensorBoard입니다. 그만큼 텐서 보드 TensorFlow가 수행하는 작업을 그래픽 및 시각적으로 모니터링할 수 있습니다.

TensorFlow 구성 요소

텐서

Tensorflow의 이름은 핵심 프레임워크에서 직접 파생되었습니다. 텐서. Tensorflow에서는 모든 계산에 텐서가 포함됩니다. 텐서는 벡터 or 매트릭스 모든 유형의 데이터를 나타내는 n차원의 데이터입니다. 텐서의 모든 값은 알려진(또는 부분적으로 알려진) 데이터 유형과 동일한 데이터 유형을 보유합니다. 형성. 데이터의 모양은 행렬이나 배열의 차원입니다.

텐서는 입력 데이터 또는 계산 결과에서 생성될 수 있습니다. TensorFlow에서 모든 작업은 내부에서 수행됩니다. 그래프그래프는 연속적으로 수행되는 계산 집합입니다. 각 연산을 그래프라고 합니다. 연산 노드 그리고 서로 연결되어 있습니다.

그래프는 노드 간의 ops와 연결을 간략하게 설명합니다. 그러나 값은 표시하지 않습니다. 노드의 에지는 텐서, 즉 ​​데이터로 작업을 채우는 방법입니다.

그래프

TensorFlow는 그래프 프레임워크를 사용합니다. 그래프는 학습 중에 수행된 모든 계열 계산을 수집하고 설명합니다. 그래프에는 다음과 같은 많은 장점이 있습니다.

  • 여러 CPU 또는 GPU, 심지어 모바일 운영 체제에서도 실행되도록 만들어졌습니다.
  • 그래프의 이식성은 계산을 즉시 또는 나중에 사용할 수 있도록 보존할 수 있습니다. 그래프는 나중에 실행하기 위해 저장할 수 있습니다.
  • 그래프의 모든 계산은 텐서를 서로 연결하여 수행됩니다.
    • 텐서는 노드와 에지를 갖는다. 노드는 수학적 연산을 수행하고 엔드포인트 출력을 생성한다. 에지는 노드 간의 입력/출력 관계를 설명한다.

TensorFlow가 인기 있는 이유는 무엇입니까?

TensorFlow는 모든 사람이 접근할 수 있도록 만들어졌기 때문에 가장 좋은 라이브러리입니다. TensorFlow 라이브러리는 CNN이나 RNN과 같은 대규모 딥 러닝 아키텍처를 구축하기 위해 다양한 API를 통합합니다. TensorFlow는 그래프 계산을 기반으로 하며 개발자가 Tensorboad를 사용하여 신경망의 구성을 시각화할 수 있도록 합니다. 이 도구는 프로그램을 디버깅하는 데 유용합니다. 마지막으로 Tensorflow는 대규모로 배포되도록 만들어졌습니다. CPU와 GPU에서 실행됩니다.

Tensorflow는 다른 딥러닝 프레임워크에 비해 GitHub에서 가장 큰 인기를 얻고 있습니다.

TensorFlow Algorithms

TensorFlow가 지원하는 알고리즘은 다음과 같습니다.

현재 TensorFlow 1.10에는 다음을 위한 API가 내장되어 있습니다.

  • 선형 회귀: tf.estimator.LinearRegressor
  • 분류:tf.estimator.LinearClassifier
  • 딥러닝 분류: tf.estimator.DNNClassifier
  • 딥 러닝 와이프 및 딥: tf.estimator.DNNLinearCombinedClassifier
  • 부스터 트리 회귀: tf.estimator.BoostedTreesRegressor
  • 부스팅 트리 분류: tf.estimator.BoostedTreesClassifier

TensorFlow에서 계산이 작동하는 방식

import numpy as np
import tensorflow as tf

코드의 처음 두 줄에서는 tensorflow를 tf로 가져왔습니다. 와 함께 Python, 라이브러리에 짧은 이름을 사용하는 것이 일반적인 관행입니다. 장점은 라이브러리를 사용해야 할 때 라이브러리의 전체 이름을 입력하지 않아도 된다는 것입니다. 예를 들어, tensorflow를 tf로 가져오고 tensorflow 함수를 사용하려는 경우 tf를 호출할 수 있습니다.

간단한 TensorFlow 예제로 Tensorflow의 기본 워크플로를 연습해 보겠습니다. 두 숫자를 곱하는 계산 그래프를 만들어 보겠습니다.

이 예제에서는 X_1과 X_2를 함께 곱합니다. Tensorflow는 연산을 연결하는 노드를 만듭니다. 이 예제에서는 곱셈이라고 합니다. 그래프가 결정되면 Tensorflow 계산 엔진은 X_1과 X_2를 함께 곱합니다.

TensorFlow에서 계산이 작동합니다.
TensorFlow 예

마지막으로 X_1 및 X_2 값으로 계산 그래프를 실행하고 곱셈 결과를 인쇄하는 TensorFlow 세션을 실행합니다.

X_1 및 X_2 입력 노드를 정의해 보겠습니다. Tensorflow에서 노드를 생성할 때 어떤 종류의 노드를 생성할지 선택해야 합니다. X1 및 X2 노드는 자리 표시자 노드가 됩니다. 자리 표시자는 계산을 할 때마다 새로운 값을 할당합니다. 이를 TF 도트 자리 표시자 노드로 생성하겠습니다.

1단계: 변수 정의

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

플레이스홀더 노드를 생성할 때, 데이터 유형을 전달해야 합니다. 여기에 숫자를 추가하여 부동 소수점 데이터 유형을 사용할 수 있습니다. tf.float32를 사용합시다. 또한 이 노드에 이름을 지정해야 합니다. 이 이름은 모델의 그래픽 시각화를 볼 때 표시됩니다. X_1 값을 갖는 name이라는 매개변수를 전달하여 이 노드의 이름을 X_1로 지정하고, 이제 X_2를 같은 방식으로 정의해 보겠습니다. X_2.

2단계: 계산 정의

multiply = tf.multiply(X_1, X_2, name = "multiply")

이제 곱셈 연산을 수행하는 노드를 정의할 수 있습니다. Tensorflow에서는 tf.multiply 노드를 생성하여 이를 수행할 수 있습니다.

X_1 및 X_2 노드를 곱셈 노드에 전달합니다. 이는 계산 그래프에서 해당 노드를 연결하도록 tensorflow에 지시하므로 x와 y에서 값을 가져와 결과를 곱하도록 요청합니다. 또한 곱셈 노드에 Multiply라는 이름을 지정해 보겠습니다. 이는 간단한 계산 그래프에 대한 전체 정의입니다.

3단계: 작업 실행

그래프에서 연산을 실행하려면 세션을 만들어야 합니다. Tensorflow에서는 tf.Session()으로 합니다. 이제 세션이 있으므로 session을 호출하여 연산 그래프에서 연산을 실행하도록 세션에 요청할 수 있습니다. 연산을 실행하려면 run을 사용해야 합니다.

추가 연산이 실행되면 X_1과 X_2 노드의 값을 가져와야 하므로 X_1과 X_2에 대한 값도 입력해야 합니다. feed_dict라는 매개변수를 제공하여 이를 수행할 수 있습니다. X_1,2,3에 1 값을 전달하고 X_4,5,6에 2 값을 전달합니다.

print(result)로 결과를 인쇄합니다. 4×10, 18×1, 4×2의 경우 5, 3, 6이 표시되어야 합니다.

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

multiply = tf.multiply(X_1, X_2, name = "multiply")

with tf.Session() as session:
    result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
    print(result)
[ 4. 10. 18.]

TensorFlow에 데이터를 로드하는 옵션

훈련 전 첫 번째 단계 기계 학습 알고리즘 데이터를 로드하는 것입니다. 데이터를 로드하는 두 가지 일반적인 방법이 있습니다.

1. 데이터를 메모리에 로드: 가장 간단한 방법입니다. 모든 데이터를 단일 배열로 메모리에 로드합니다. 당신은 Python 암호. 이 코드 줄은 Tensorflow와 관련이 없습니다.

2. Tensorflow 데이터 파이프라인: Tensorflow에는 데이터를 로드하고, 작업을 수행하고, 머신 러닝 알고리즘을 쉽게 공급하는 데 도움이 되는 내장 API가 있습니다. 이 방법은 특히 대규모 데이터 세트가 있는 경우 매우 효과적입니다. 예를 들어, 이미지 레코드는 엄청나고 메모리에 맞지 않는 것으로 알려져 있습니다. 데이터 파이프라인은 스스로 메모리를 관리합니다.

어떤 솔루션을 사용해야 합니까?

메모리에 데이터 로드

데이터 세트가 너무 크지 않은 경우(예: 10GB 미만) 첫 번째 방법을 사용할 수 있습니다. 데이터는 메모리에 들어갈 수 있습니다. Pandas라는 유명한 라이브러리를 사용하여 CSV 파일을 가져올 수 있습니다. 다음 튜토리얼에서 팬더에 대해 더 자세히 배울 것입니다.

Tensorflow 파이프라인으로 데이터 로드

두 번째 방법은 데이터 세트가 큰 경우 가장 효과적입니다. 예를 들어, 50GB의 데이터 세트가 있고 컴퓨터의 메모리가 16GB만 있는 경우 시스템이 충돌합니다.

이 상황에서는 Tensorflow 파이프라인을 구축해야 합니다. 파이프라인은 데이터를 일괄적으로 또는 작은 단위로 로드합니다. 각 배치는 파이프라인으로 푸시되고 학습 준비가 됩니다. 파이프라인을 구축하면 병렬 컴퓨팅을 사용할 수 있으므로 탁월한 솔루션입니다. 이는 Tensorflow가 여러 CPU에서 모델을 훈련한다는 것을 의미합니다. 강력한 신경망 훈련을 위한 계산과 허가를 촉진합니다.

신경망에 공급할 중요한 파이프라인을 구축하는 방법에 대한 다음 튜토리얼에서 확인할 수 있습니다.

간단히 말해서, 작은 데이터 세트가 있는 경우 Pandas 라이브러리를 사용하여 메모리에 데이터를 로드할 수 있습니다.

대규모 데이터 세트가 있고 여러 CPU를 사용하려는 경우 Tensorflow 파이프라인을 사용하는 것이 더 편안할 것입니다.

TensorFlow 파이프라인을 만드는 방법

TensorFlow 파이프라인을 생성하는 단계는 다음과 같습니다.

이전 예에서는 X_1 및 X_2에 대해 세 가지 값을 수동으로 추가했습니다. 이제 Tensorflow에 데이터를 로드하는 방법을 살펴보겠습니다.

1단계) 데이터 생성

우선, numpy 라이브러리를 사용하여 두 개의 임의의 값을 생성해 보겠습니다.

import numpy as np
x_input = np.random.sample((1,2))
print(x_input)

[[0.8835775 0.23766977]]

2단계) 자리 표시자 만들기

이전 예제와 마찬가지로 X라는 이름의 자리 표시자를 만듭니다. 텐서의 모양을 명시적으로 지정해야 합니다. 이 경우에는 값이 두 개만 있는 배열을 로드합니다. 모양을 다음과 같이 쓸 수 있습니다. Shape=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

3단계) ​​데이터 세트 방법 정의

다음으로 자리 표시자 x의 값을 채울 수 있는 데이터 세트를 정의해야 합니다. tf.data.Dataset.from_tensor_slices 메소드를 사용해야 합니다.

dataset = tf.data.Dataset.from_tensor_slices(x)

4단계) 파이프라인 생성

XNUMX단계에서는 데이터가 흐를 파이프라인을 초기화해야 합니다. make_initialized_iterator를 사용하여 반복자를 생성해야 합니다. 우리는 그것을 반복자(iterator)라고 명명합니다. 그런 다음 이 반복자를 호출하여 다음 데이터 배치인 get_next를 공급해야 합니다. 이 단계의 이름을 get_next로 지정합니다. 이 예에는 값이 두 개만 포함된 데이터 배치가 하나만 있습니다.

iterator = dataset.make_initializable_iterator() 
get_next = iterator.get_next()

5단계) 작업 실행

마지막 단계는 이전 예와 비슷합니다. 세션을 시작하고 작업 반복자를 실행합니다. feed_dict에 생성된 값을 공급합니다. numpy. 이 두 값은 자리 표시자 x를 채웁니다. 그런 다음 get_next를 실행하여 결과를 인쇄합니다.

with tf.Session() as sess:
    # feed the placeholder with data
    sess.run(iterator.initializer, feed_dict={ x: x_input }) 
    print(sess.run(get_next)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

요약

  • 텐서플로우 의미: TensorFlow 최근 몇 년 동안 가장 유명한 딥 러닝 라이브러리입니다. TensorFlow를 사용하는 실무자는 CNN, RNN 또는 간단한 인공 신경망과 같은 딥 러닝 구조를 구축할 수 있습니다.
  • TensorFlow는 주로 학계, 스타트업, 대기업에서 사용합니다. Google은 Gmail, Photo, Google Search Engine을 포함한 거의 모든 Google 일상 제품에서 TensorFlow를 사용합니다.
  • Google Brain 팀은 연구자와 제품 개발자 간의 격차를 메우기 위해 TensorFlow를 개발했습니다. 2015년에 TensorFlow를 공개했고 인기가 빠르게 높아지고 있습니다. 오늘날 TensorFlow는 GitHub에서 가장 많은 리포지토리를 보유한 딥 러닝 라이브러리입니다.
  • 실무자는 규모에 맞게 배포하기 쉽기 때문에 Tensorflow를 사용합니다. 클라우드나 iOS와 같은 모바일 장치에서 작동하도록 구축되었습니다. Android.

Tensorflow는 세션에서 작동합니다. 각 세션은 다양한 계산이 포함된 그래프로 정의됩니다. 간단한 예는 숫자를 곱하는 것입니다. Tensorflow에서는 세 단계가 필요합니다.

  1. 변수 정의
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. 계산 정의
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. 작업을 실행하다
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
print(result)

Tensorflow의 일반적인 방법 중 하나는 데이터를 로드하는 파이프라인을 만드는 것입니다. 다음 XNUMX가지 단계를 따르면 TensorFLow에 데이터를 로드할 수 있습니다.

  1. 데이터 생성
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. 자리 표시자 만들기
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. 데이터 세트 방법 정의
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. 파이프라인 생성
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. 프로그램 실행
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))