arrow_back

TensorFlow: Qwik Start

로그인 가입
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스

TensorFlow: Qwik Start

실습 45분 universal_currency_alt 크레딧 1개 show_chart 입문
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스

GSP637

Google Cloud 사용자 주도형 실습

개요

이 실습에서는 Java나 C++ 같은 언어로 명시적인 규칙을 프로그래밍하는 대신, 데이터 학습을 통해 숫자 간 관계를 판단하는 규칙 추론 시스템을 빌드하면서 기본적인 'Hello World' 수준의 머신러닝을 배우게 됩니다.

목표

이 실습에서는 다음 작업을 수행하는 방법을 배웁니다.

  • Jupyter 노트북에서 개발 환경 설정하기
  • 머신러닝 모델 설계하기
  • 신경망 학습시키기
  • 모델 테스트하기

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머에는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지 표시됩니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 직접 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간---실습을 시작하고 나면 일시중지할 수 없습니다.
참고: 계정에 추가 요금이 발생하지 않도록 하려면 개인용 Google Cloud 계정이나 프로젝트가 이미 있어도 이 실습에서는 사용하지 마세요.

소개

피트니스 추적을 위한 활동 감지 시스템을 빌드하는 중이라고 생각해 보세요. 다음 조건문을 사용하면 사람이 움직이는 속도에 액세스하여 이 속도에 기반한 활동을 추론해 볼 수 있을 것입니다.

if(speed<4){ status=WALKING; }
  • 아래의 다른 조건문을 사용하면 활동을 뛰기(running)로 확장할 수 있습니다.
if(speed<4){ status=WALKING; } else { status=RUNNING; }
  • 마찬가지로 다음의 또 다른 조건문을 사용하면 자전거 타기(cycling) 활동도 감지할 수 있습니다.
if(speed<4){ status=WALKING; } else if(speed<12){ status=RUNNING; } else { status=BIKING; }
  • 그렇다면 골프(golf)와 같은 활동을 포함하고 싶다면 어떨까요? 이제는 활동을 판단하는 규칙을 만들기가 더 어려워집니다.
// Now what?

골프 활동을 감지할 수 있는 프로그램을 코드로 표현해 작성하는 것은 무척 어렵습니다.

그러면 어떻게 해야 할까요? 머신러닝을 사용하면 문제를 해결할 수 있습니다.

머신러닝이란?

이전 섹션에서는 사용자의 피트니스 활동을 판단하려고 할 때 발생하는 문제를 살펴보았습니다. 골프와 같은 활동을 감지하려면 조건이 더 복잡해져야 하므로 코드를 추가로 작성해 이 목표를 달성하기에는 한계가 있었습니다.

다음 다이어그램에 나온 것처럼 기존 방식으로 애플리케이션을 빌드하는 경우를 생각해 보겠습니다.

전통적인 프로그래밍에 규칙과 데이터를 입력하여 대답을 도출하는 과정을 보여주는 다이어그램

규칙은 프로그래밍 언어로 표현됩니다. 이러한 규칙이 데이터에 적용되면 프로그램이 대답을 제공합니다. 활동 감지의 경우 대답을 찾기 위해 규칙(활동 유형을 정의하기 위해 작성한 코드)이 데이터(사용자의 이동 속도)에 적용되고, 사용자의 활동 상태(걷기, 뛰기, 자전거 타기 등)를 판단하기 위한 함수에서 도출되는 반환 값이 대답이 됩니다.

머신러닝을 통해 이 활동을 감지하는 프로세스도 축만 다를 뿐 이와 매우 유사합니다.

머신러닝에 대답과 데이터를 입력하여 규칙을 도출하는 과정을 보여주는 다이어그램

규칙을 정의하고 프로그래밍 언어로 표현하려고 애쓰는 대신, 데이터와 함께 대답(일반적으로 라벨이라고 함)을 제공합니다. 그러면 머신이 대답과 데이터 간의 관계를 결정하는 규칙을 추론합니다. 예를 들어 머신러닝 맥락에서 활동 감지 시나리오는 다음과 같습니다.

1과 0으로 표시된 4가지 라벨(걷기, 뛰기, 자전거 타기, 골프)

데이터를 많이 모은 다음, '이것이 걷는 모습'이고 '이것이 뛰는 모습'이라는 식으로 라벨을 지정하여 활동을 효과적으로 표현합니다. 그러면 컴퓨터는 데이터에서 특정 활동의 고유 패턴을 판단하는 규칙을 추론할 수 있습니다.

이 방법은 이러한 시나리오를 프로그래밍하는 대안이 될 뿐 아니라 기존의 규칙 기반 프로그래밍 접근방식에서는 불가능했던 골프 같은 새로운 시나리오를 처리할 수 있는 가능성을 제공합니다.

전통적인 프로그래밍에서는 코드가 일반적으로 프로그램이라고 하는 바이너리로 컴파일됩니다. 머신러닝에서는 데이터와 라벨로 생성하는 항목을 모델이라고 부릅니다.

이 다이어그램을 다시 살펴보겠습니다.

머신러닝에 대답과 데이터를 입력하여 규칙을 도출하는 과정을 보여주는 다이어그램

위 과정의 결과를 모델이라고 볼 수 있으며, 이 모델은 런타임 환경에서 다음과 같이 사용됩니다.

모델에 데이터를 입력하여 예측을 도출하는 과정을 보여주는 다이어그램

모델에 데이터를 입력하면 모델은 학습을 통해 추론한 규칙을 사용하여 '이 데이터는 걷기 같습니다'라거나 '저 데이터는 자전거 타기 같습니다'와 같은 예측을 도출합니다.

이 실습에서는 모든 머신러닝 시나리오에서 사용할 수 있는 빌딩 블록을 사용해 아주 단순한 'Hello World' 모델을 빌드해 보겠습니다.

작업 1. Vertex AI Workbench에서 노트북 열기

  1. Google Cloud 콘솔의 탐색 메뉴에서 Vertex AI > Workbench를 클릭합니다.

  2. 인스턴스를 찾아 JupyterLab 열기 버튼을 클릭합니다.

Workbench 인스턴스의 JupyterLab 인터페이스가 새 브라우저 탭에서 열립니다.

TensorFlow 및 추가 패키지 설치

  1. Launcher 메뉴의 Other에서 Terminal을 선택합니다.

  2. Python 환경이 이미 구성되어 있는지 확인합니다. 다음 명령어를 복사하여 붙여넣습니다.

python --version

출력 예시:

Python 3.10.14
  1. 다음 명령어를 실행하여 TensorFlow 패키지를 설치합니다.
pip3 install tensorflow
  1. pip3을 업그레이드하기 위해 터미널에서 다음 명령어를 실행합니다.
pip3 install --upgrade pip

Pylint는 Python 코드의 오류를 확인하고 Python 소스 코드의 문법 및 스타일 문제를 찾는 도구입니다.

  1. 다음 명령어를 실행하여 pylint 패키지를 설치합니다.
pip install -U pylint --user
  1. requirements.txt 파일에 나열되어 있는 실습용 필수 패키지를 설치합니다.
pip install -r requirements.txt

이제 환경이 준비되었습니다.

작업 2. 첫 번째 머신러닝 모델 만들기

다음과 같은 일련의 숫자를 살펴보세요. 숫자 사이의 관계가 보이시나요?

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

왼쪽에서 오른쪽으로 읽어보면 X 값이 1씩 증가하고, 그에 따라 Y 값은 3씩 증가하는 것을 알 수 있습니다. 따라서 Y=3X에 일정 값을 더하거나 빼는 관계식이 성립합니다.

한편, X가 0일 때 Y 값을 보면 1입니다.

이 두 가지 사실을 관찰한 결과, 관계식은 Y=3X+1이란 사실을 알 수 있습니다.

코드를 사용해 모델(신경망이라고 함)을 학습시켜 데이터에서 패턴을 발견하는 방식도 이와 거의 일치합니다.

데이터를 사용해 신경망을 학습시키는 것입니다. 일련의 X와 일련의 Y를 피딩하면 그 사이의 관계를 파악할 수 있습니다.

새 노트북을 만들고 라이브러리 가져오기

  1. Workbench 왼쪽에 있는 + 아이콘을 클릭하여 새 런처를 엽니다.

  2. Launcher 메뉴의 Notebook에서 Python3을 선택합니다.

새 노트북 파일

새 Jupyter 노트북이 표시됩니다. Jupyter 노트북을 사용하는 방법에 관한 자세한 내용은 Jupyter 노트북 문서를 참조하세요.

  1. Cloud Logging을 위한 logginggoogle-cloud-logging을 가져오고 구성합니다. 첫 번째 셀에 다음 코드를 추가합니다.
import logging import google.cloud.logging as cloud_logging from google.cloud.logging.handlers import CloudLoggingHandler from google.cloud.logging_v2.handlers import setup_logging cloud_logger = logging.getLogger('cloudLogger') cloud_logger.setLevel(logging.INFO) cloud_logger.addHandler(CloudLoggingHandler(cloud_logging.Client())) cloud_logger.addHandler(logging.StreamHandler())
  1. 모델을 학습시키고 평가하기 위해 tensorflow를 가져옵니다. 편의상 tf라고 부릅니다. 첫 번째 셀에 다음 코드를 추가합니다.
# Import TensorFlow import tensorflow as tf
  1. 디버깅 목적으로 데이터를 파싱하기 위해 numpy를 가져옵니다. 편의상 np라고 부릅니다. 첫 번째 셀에 다음 코드를 추가합니다.
# Import numpy import numpy as np
  1. 셀을 실행하기 위해 Run 버튼을 클릭하거나 Shift + Enter 키를 누릅니다.

  2. 노트북을 저장합니다. File > Save를 클릭합니다. 파일 이름을 model.ipynb로 지정하고 OK를 클릭합니다.

참고: 출력에 표시될 수도 있는 경고는 무시해도 됩니다.

데이터 준비하기

다음으로 모델 학습에 사용할 데이터를 준비해야 합니다. 이 실습에서는 앞서 사용한 6개의 X와 6개의 Y를 사용하겠습니다.

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

보시다시피 X와 Y의 관계식은 Y=3X+1이므로, X=1일 때 Y=4인 식으로 진행됩니다.

numpy라는 Python 라이브러리는 데이터 피딩에 많이 사용되는 배열 형식의 데이터 구조를 많이 제공합니다. 이 데이터 구조를 사용하려면 np.array([])를 사용해 값을 numpy에 배열로 지정하세요.

  1. 두 번째 셀에 다음 코드를 추가합니다.
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

모델 설계하기

이 섹션에서는 TensorFlow를 사용해 모델을 설계해 보겠습니다.

모델을 학습시키기 위해 신경망이라는 머신러닝 알고리즘을 사용해야 합니다. 가장 간단한 형태의 신경망을 생성해 보겠습니다. 이 신경망에는 1개의 레이어가 있으며 또한 이 레이어는 1개의 뉴런으로 구성됩니다. 신경망은 한 번에 하나의 값만 입력받기 때문에 입력 형태는 [1]이어야 합니다.

참고: 신경망에 대한 더 자세한 내용은 이 퀘스트의 다음 실습에서 배우게 됩니다.
  1. 두 번째 셀에 다음 코드를 추가합니다.
model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])

모델 컴파일하기

다음으로 신경망을 컴파일하기 위한 코드를 작성해 보겠습니다. 이때 손실(loss) 함수와 옵티마이저(optimizer) 함수 2가지를 지정해야 합니다.

머신러닝을 위한 수학을 많이 보았다면 보통은 바로 이 지점에서 수학을 사용하게 됩니다. 하지만 tf.keras는 수학을 함수에 캡슐화하여 제공합니다.

  • 앞에서 살펴본 것처럼 숫자 간 관계식은 y=3x+1입니다.

  • 컴퓨터가 이 관계를 학습하려고 하는 과정에서 y=10x+10으로 추측했다고 가정해 보겠습니다. 손실(loss) 함수는 추측한 답을 알려진 정답과 비교해 보면서 얼마나 잘 또는 잘못 맞췄는지 측정합니다.

참고: tf.keras에서 사용할 수 있는 다양한 유형의 손실 함수에 대해서는 모듈: tf.keras.losses 문서를 참조하세요.
  • 다음으로, 모델은 옵티마이저 함수를 사용하여 또 다른 추측을 합니다. 손실 함수의 결과를 바탕으로 손실을 최소화하려고 하는 것입니다. 이 시점에서 y=5x+5와 같은 결과가 나올 수 있습니다. 여전히 오답이긴 하지만 정답에 더 가까워졌습니다(손실이 줄어듦).
참고: tf.keras에서 사용할 수 있는 다양한 유형의 옵티마이저에 대해서는 모듈: tf.keras.optimizers 문서를 참조하세요.
  • 모델은 지정한 세대 수만큼 이 과정을 반복합니다.
  1. 두 번째 셀에 다음 코드를 추가합니다.
model.compile(optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.MeanSquaredError())

위의 코드 스니펫에서는 모델을 대상으로 손실에는 mean_squared_error를, 옵티마이저에는 stochastic gradient descent (sgd)를 사용하도록 명령합니다. 아직 이러한 수학을 이해할 필요는 없지만 효과가 있다는 것은 알 수 있습니다.

참고: 앞으로 다양한 시나리오에 적합한 손실 함수와 옵티마이저 함수에 대해 계속 배우게 될 것입니다.

신경망 학습시키기

X와 Y 간의 관계를 '파악'하도록 신경망을 학습시키기 위해 model.fit을 사용해 보겠습니다.

이는 추측을 하고, 얼마나 잘 또는 잘못 맞췄는지(손실이라고 함) 측정하고, 옵티마이저를 사용하여 또 다른 추측을 하도록 하는 등 모델을 반복적으로 학습시키는 함수입니다. 이 과정은 실습에서 지정한 세대 수만큼 반복되며 여기서는 500입니다.

  1. 두 번째 셀에 다음 코드를 추가합니다.
model.fit(xs, ys, epochs=500)

위의 코드에서 model.fit은 지정된 세대 수만큼 모델을 학습시킵니다.

참고: model.fit에 관한 자세한 내용은 tf.keras.Model 문서의 fit 섹션을 참조하세요.

이제 파일이 다음과 같이 보이게 됩니다(코드는 두 개의 별도 셀로 나누어 표시됨).

import logging import google.cloud.logging as cloud_logging from google.cloud.logging.handlers import CloudLoggingHandler from google.cloud.logging_v2.handlers import setup_logging cloud_logger = logging.getLogger('cloudLogger') cloud_logger.setLevel(logging.INFO) cloud_logger.addHandler(CloudLoggingHandler(cloud_logging.Client())) cloud_logger.addHandler(logging.StreamHandler()) import tensorflow as tf import numpy as np xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float) model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])]) model.compile(optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.MeanSquaredError()) model.fit(xs, ys, epochs=500)

코드 실행하기

이제 스크립트가 준비되었으니 실행하고 결과를 확인해 보세요.

  1. Run 버튼을 클릭하거나 Shift + Enter 키를 눌러 노트북의 두 번째 셀을 실행합니다.

  2. 결과를 살펴봅니다. 스크립트가 각 세대에 대한 손실을 출력하는 것을 볼 수 있습니다. 출력 결과가 여기에 나온 것과 조금 다를 수 있습니다.

참고: 값에 e-가 포함된 숫자는 음의 지수가 있는 과학적 표기법으로 표시됩니다.

세대를 쭉 스크롤하면 처음 몇 번은 손실 값이 매우 크지만 단계를 거칠수록 더 작아지는 것을 볼 수 있습니다. 예를 들면 다음과 같습니다.

점점 줄어드는 세대 손실 줄 세대 손실의 2번째 줄은 52.1992인 반면 9번째 줄은 9.7403입니다.

학습이 진행될수록 손실은 매우 작아집니다.

세대 손실의 45번째 줄은 0.0023이지만 54번째 줄은 7.1057e-04입니다.

학습이 끝날 즈음에는 손실이 매우 작아졌기 때문에 모델이 숫자 간 관계를 잘 추론하고 있음을 알 수 있습니다.

세대 손실의 495번째 줄은 5.4194e-08이지만 500번째 줄은 4.8896e-08입니다.

아마 세대가 500번이나 필요하지는 않을 수도 있으니 다양한 값으로 실험해 보세요. 이 예시를 보면 50번의 세대만으로도 손실이 크게 줄었 때문에 이 정도로도 충분할 수 있습니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 머신러닝 모델 만들기

모델 사용하기

이제 X와 Y 간의 관계를 파악하도록 학습된 모델을 만들었습니다.

model.predict 메서드를 사용하면 학습 중에 모델이 보지 못했던 X에 대한 Y 값도 계산할 수 있습니다. 예를 들어 X = 10일 때 Y는 얼마일까요?

  1. 세 번째 셀에 다음 코드를 추가하여 예측을 수행합니다.
cloud_logger.info(str(model.predict(np.array([10.0])))) 참고: 예측 결과는 클라우드 로그 생성을 위해 cloud_logger로 전달되며, 생성된 클라우드 로그에서 진행 상황을 확인할 수 있습니다.
  1. Ctrl + S를 누르거나 File > Save를 클릭하여 노트북을 저장합니다.

  2. 세 번째 셀을 실행하려면 Run 버튼을 클릭하거나 Shift + Enter 키를 누릅니다.

학습 로그(세대) 다음에 Y 값이 나열됩니다.

출력 예시:

Y 값이 31.005917임

아마 Y=31이라고 생각하셨을 것입니다. 하지만 그보다 조금 더 높은 결과(31.005917)가 나왔죠. 왜 그럴까요?

은 신경망이 확률을 다루기 때문입니다. 신경망은 X와 Y 간의 관계식이 Y=3X+1일 가능성이 매우 높다고 계산했습니다. 하지만 6개의 데이터 포인트만으로는 확실히 알 수 없습니다. 따라서 10에 대한 결과는 31에 매우 가깝지만, 반드시 31이 되는 것은 아닙니다.

신경망을 사용하다 보면 이 패턴이 반복되는 것을 보게 됩니다. 확실한 정답이 아닌 확률을 다루는 경우가 거의 대부분이며, 특히 분류와 관련해서는 결과가 확률을 기반으로 하는지 확인하기 위해 약간의 코딩을 수행해야 합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 모델 사용하기

수고하셨습니다

수고하셨습니다. 이 실습에서는 TensorFlow를 사용하여 직접 머신러닝 모델을 만들고, 학습시키고, 테스트했습니다.

다음 단계/더 학습하기

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2024년 9월 16일

실습 최종 테스트: 2024년 9월 16일

Copyright 2024 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.