Quick tip: Review the prerequisites before you run the lab
Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the student account, which may cause extra charges incurred to your personal account.
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스
TensorFlow를 사용한 컴퓨터 비전 소개
실습
1시간
universal_currency_alt
크레딧 5개
show_chart
중급
Google에서 개발한 TensorFlow는 이식성을 갖춘 강력한 오픈소스 머신러닝(ML) 라이브러리로, 방대한 규모의 데이터 세트를 처리할 수 있습니다. 이 실습에서는 TensorFlow Vertex AI Workbench를 사용해 다양한 의류 항목을 인식할 수 있는 컴퓨터 비전 모델을 만들고 학습시켜 봅니다.
TensorFlow 소개
TensorFlow는 ML 모델 빌드에 필요한 컴퓨팅 프레임워크를 제공합니다. 또한 원하는 추상화 수준으로 모델을 구축하는 데 사용할 수 있는 여러 툴킷을 제공합니다. 이 실습에서는 TensorFlow에서 고수준 API인 tf.keras를 사용하여 이미지를 분류하는 신경망을 빌드하고 학습시켜 봅니다.
신경망
신경망이란 인간의 뇌에서 아이디어를 얻어 만들어진 모델입니다. 신경망은 하나 이상의 히든 레이어를 포함해 여러 레이어로 구성되어 있으며, 레이어는 비선형성의 단순한 단위 또는 뉴런이 연결되어 구성됩니다.
신경망 내의 노드는 보통 여러 입력값을 취하여 하나의 출력값을 생성합니다. 뉴런은 가중치가 적용된 입력값의 합계에 활성화 함수를 적용(비선형 변환)하여 출력값을 산출합니다.
배치 크기는 머신러닝에서 사용되는 용어로, 반복 1회에 활용되는 학습 예의 수를 말합니다. 배치 크기 값을 32로 설정합니다.
아래 코드를 model.ipynb에 추가하여 배치 크기를 지정합니다.
# Define batch size
BATCH_SIZE = 32
신경망을 학습시킬 때는 픽셀 값을 0~1 범위로 조정하는 것이 여러 가지 이유로 더 쉽습니다. 이 과정을 '정규화'라고 합니다. FashionMNIST 데이터 세트의 픽셀 값이 [0, 255] 범위에 있으므로, 이미지를 정규화하려면 픽셀 값을 255.0으로 나누어야 합니다.
아래 주어진 코드는 tf.data.Dataset의 map() 함수를 사용해 ds_train 및 ds_test의 이미지에 정규화를 적용합니다. 픽셀 값이 tf.uint8 유형이므로 tf.cast 함수를 사용하여 tf.float32로 변환한 다음 255.0으로 나눕니다. BATCH_SIZE를 인수로 하는 batch() 메서드를 호출하여 데이터 세트도 여러 배치로 변환합니다.
tf.data.Dataset에 대해 사용할 수 있는 모든 메서드를 자세히 알아보려면 여기를 참조하세요.
파일 끝에 아래 코드를 추가합니다.
# Normalize and batch process the dataset
ds_train = ds_train.map(lambda x, y: (tf.cast(x, tf.float32)/255.0, y)).batch(BATCH_SIZE)
ds_test = ds_test.map(lambda x, y: (tf.cast(x, tf.float32)/255.0, y)).batch(BATCH_SIZE)
학습 데이터 세트에 있는 이미지의 최솟값 및 최댓값을 다시 출력합니다.
파일 끝에 아래 코드를 추가합니다.
# Examine the min and max values of the batch after normalization
image_batch, labels_batch = next(iter(ds_train))
print("After normalization ->", np.min(image_batch[0]), np.max(image_batch[0]))
작업 4. 모델을 설계하고, 컴파일하고, 학습시키기
이 섹션에서는 TensorFlow를 사용해 모델을 설계합니다.
아래 코드를 파일에 추가합니다.
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
모델 아키텍처에 사용되는 여러 유형의 레이어와 파라미터를 살펴보겠습니다.
Sequential: 신경망에 있는 레이어의 순서를 정의합니다.
Flatten: 현재 이미지가 (28, 28) 모양이므로 값은 정방 행렬 형태입니다. Flatten 레이어는 이 정방 행렬을 1차원 벡터로 변환합니다.
Dense: 뉴런 레이어를 추가합니다.
각 뉴런 레이어에는 뉴런의 활성화 여부를 결정하는 활성화 함수가 필요합니다. 수많은 옵션이 있지만, 이 실습에서는 다음과 같은 옵션을 사용합니다.
ReLU는 X>0이면 X를 반환하고, 그 외의 경우 0을 반환한다는 의미의 함수입니다. 이 함수는 0 이상의 값을 네트워크의 다음 레이어로 전달합니다.
Softmax는 여러 값을 취하여 그중 가장 큰 값을 고르기 때문에 가장 큰 값을 찾기 위해 값을 정렬할 필요가 없습니다. 예를 들어, 마지막 레이어의 출력이 [0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05]였다면 이 함수는 [0,0,0,0,1,0,0,0,0]을 반환합니다.
모델을 컴파일하고 학습시키기
이 섹션에서는 먼저 옵티마이저와 손실 함수를 사용해 모델을 컴파일합니다. 그런 다음 모델에 학습 데이터와 라벨을 학습시킵니다.
목표는 모델이 학습 데이터와 그 라벨의 관계를 알아내는 것입니다. 학습이 완료되면 모델이 학습 데이터와 유사한 새로운 의류 이미지를 보고 어떤 유형에 속하는 의류인지 예측할 수 있어야 합니다.
옵티마이저는 tf.keras 모델을 컴파일하는 데 필요한 두 개의 인수 중 하나입니다. Optimizer는 가중치와 학습률 같은 신경망의 속성을 수정하는 알고리즘입니다. 이 알고리즘을 통해 손실을 줄이고 정확성을 높일 수 있습니다.
tf.keras에서 사용할 수 있는 다양한 유형의 옵티마이저에 대해 자세히 알아보려면 여기를 참조하세요.
Loss는 모델의 성능을 숫자로 나타내는 함수입니다. 손실값이 작을수록 모델의 성능이 좋고, 값이 클수록 성능이 좋지 않다는 뜻입니다.
tf.keras에서 사용할 수 있는 다양한 유형의 손실 함수에 대해 자세히 알아보려면 여기를 참조하세요.
metrics= 파라미터에 주목하세요. 이 파라미터를 통해 TensorFlow는 예측된 결과를 알려진 답변(라벨)과 대조하여 세대가 한 번 끝날 때마다 학습의 정확성을 보고할 수 있습니다. 학습이 얼마나 효율적으로 진행되고 있는지 보고하는 파라미터라고 할 수 있습니다.
'tf.keras'에서 사용할 수 있는 다양한 유형의 측정항목을 자세히 알아보려면 여기를 클릭하세요.
# Compile the model
model.compile(optimizer = tf.keras.optimizers.Adam(),
loss = tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
model.fit(ds_train, epochs=5)
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 머신러닝 모델 만들기
코드 실행
Run(실행) 버튼을 클릭하거나 Shift + Enter 키를 눌러 두 번째 셀을 실행합니다.
노트북 셀이 실행되면 학습의 각 세대(또는 전달)가 끝날 때마다 보고되는 손실과 정확성을 확인할 수 있습니다. 각 세대(또는 전달)가 끝날 때마다 정확성이 높아지는 점에 주목하세요.
# Values before normalization 출력에서 최솟값 및 최댓값이 [0, 255] 범위 안에 있는 것을 확인할 수 있습니다. 정규화가 끝난 후에는 모든 값이 [0, 1] 범위에 속합니다.
학습이 진행됨에 따라 손실은 줄어들고 정확성은 높아집니다.
모델이 학습을 완료하면 마지막 세대가 끝난 후 정확성 값을 확인할 수 있습니다. 위의 결과처럼 0.8846에 가까운 값이 나오게 됩니다(실제 정확성은 다를 수 있습니다).
이는 신경망이 약 89%의 정확도로 학습 데이터를 분류할 수 있다는 뜻입니다. 다시 말해, 이미지와 라벨 간의 패턴 일치를 찾아내는 데 89%의 성공률을 보인다는 것입니다. 아주 뛰어난 결과는 아니지만, 소규모 신경망에서 단 5세대 학습되었다는 점을 고려하면 그렇게 나쁜 결과는 아닙니다.
작업 5. 학습에 사용하지 않은 데이터에 대해 모델 성능을 평가하기
그렇다면 학습하지 않은 데이터에 대한 모델의 성능은 어떨까요?
테스트 세트를 통해 이 질문에 대한 답을 얻을 수 있습니다. model.evaluate를 호출하여 두 개의 세트를 전달하면 모델이 각 세트에 대한 손실 값을 보고합니다.
모델이 테스트 세트(ds_test)에 대해 보고한 정확성은 0.8708로, 이는 정확도가 87% 정도라는 뜻입니다. (실제 값은 약간 다를 수 있음)
예상대로, 학습하지 않은 데이터에 대한 모델의 정확도는 학습한 데이터를 처리할 때만큼 높지 않습니다.
TensorFlow를 깊이 탐구하다 보면 이 정확도를 개선하는 방법을 배울 수 있습니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 모델 사용
작업 6. 모델을 저장하고 로드하기
모델 진행 상황은 학습 중이나 학습 후에도 저장이 가능합니다. 즉, 모델이 중단한 부분에서 학습을 이어 나가고 학습 시간이 길어지는 것을 피할 수 있습니다. 또한 저장이 가능하므로 모델을 공유하고 다른 사람이 모델을 변형할 수 있습니다. 이 첫 번째 연습에서 모델을 저장하고 로드하는 데 필요한 코드를 추가해 봅니다.
모델 전체를 저장할 수 있는 파일 형식으로는 2가지가 있습니다(SavedModel 및 Keras). TensorFlow SavedModel 형식은 TF2.x의 기본 파일 형식입니다. 하지만 Keras 형식으로 저장할 수도 있습니다. 2가지 파일 형식으로 모델을 저장하는 방법을 자세히 알아보겠습니다.
노트북에서 네 번째 셀에 아래 코드를 추가합니다.
# Save the entire model as a Keras model using .keras format
model.save('saved_model.keras')
# Load the model using custom_objects to handle the custom activation function
new_model = tf.keras.models.load_model('saved_model.keras', custom_objects={'softmax_v2': tf.keras.activations.softmax})
# Summary of loaded SavedModel
new_model.summary()
# Save the entire model to a keras file.
model.save('my_model.keras')
# Recreate the exact same model, including its weights and the optimizer
new_model_keras = tf.keras.models.load_model('my_model.keras', custom_objects={'softmax_v2': tf.keras.activations.softmax})
# Summary of loaded keras model
new_model_keras.summary()
위 코드는 모델을 2가지 다른 형식으로 저장하고, 저장된 모델을 다시 로드하는 방법을 보여줍니다. 사용 사례에 따라 원하는 형식을 선택하면 됩니다. TensorFlow 문서의 '모델 저장 및 로드'에서 이 기능에 대해 자세히 살펴보세요.
Run(실행) 버튼을 클릭하거나 Shift + Enter 키를 눌러 셀을 실행합니다.
출력 마지막 부분에서 두 세트의 모델 요약을 확인할 수 있습니다. 첫 번째 세트는 모델이 SavedModel 형식으로 저장된 후의 요약을 보여줍니다. 두 번째 세트는 모델이 h5 형식으로 저장된 후의 요약을 보여줍니다.
두 가지 모델 요약이 동일한 것을 확인할 수 있는데, 이는 실제로 동일한 모델을 두 가지 형식으로 저장했기 때문입니다.
앞서 모델을 학습시키는 과정에서 학습이 진행됨에 따라 모델의 손실이 줄어들고 정확성이 높아짐을 확인할 수 있었습니다. 원하는 수준의 학습 정확성과 손실을 달성한 이후에도, 학습이 완료되기까지 어느 정도 기다려야 할 수도 있습니다.
"모델이 원하는 정확도에 도달했을 때 학습을 멈출 수 있다면 좋지 않을까?"라고 생각했을 수도 있습니다.
예를 들어 95% 정도의 정확도가 필요하고 모델이 3세대의 학습으로 이를 달성했다면 남아 있는 세대가 끝날 때까지 기다려야 할 필요가 있을까요?
이때 사용할 수 있는 도구가 바로 콜백입니다.
콜백은 학습이나 평가, 추론 중에 Keras 모델의 동작을 맞춤설정할 수 있는 강력한 도구입니다. 모델이 학습 세트에 대해 원하는 수준의 정확성에 도달하면 학습을 멈추도록 콜백을 정의할 수 있습니다.
아래 코드를 사용해 84%의 정확성에 도달했을 때 학습을 멈추도록 하는 콜백을 설정하면 어떻게 되는지 알아보겠습니다.
런처를 열고 Python3를 선택하여 새 Jupyter 노트북을 만듭니다.
파일을 callback_model.ipynb라는 이름으로 저장합니다.
아래 코드를 복사하여 callback_model.ipynb의 첫 번째 셀에 붙여넣습니다.
# Import and configure 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
exp_logger = logging.getLogger('expLogger')
exp_logger.setLevel(logging.INFO)
exp_logger.addHandler(CloudLoggingHandler(cloud_logging.Client(), name="callback"))
# Import tensorflow_datasets
import tensorflow_datasets as tfds
# Import numpy
import numpy as np
# Import TensorFlow
import tensorflow as tf
# Define Callback
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
if(logs.get('sparse_categorical_accuracy')>0.84):
exp_logger.info("\nReached 84% accuracy so cancelling training!")
self.model.stop_training = True
callbacks = myCallback()
# Define, load and configure data
(ds_train, ds_test), info = tfds.load('fashion_mnist', split=['train', 'test'], with_info=True, as_supervised=True)
# Define batch size
BATCH_SIZE = 32
# Normalizing and batch processing of data
ds_train = ds_train.map(lambda x, y: (tf.cast(x, tf.float32)/255.0, y)).batch(BATCH_SIZE)
ds_test = ds_test.map(lambda x, y: (tf.cast(x, tf.float32)/255.0, y)).batch(BATCH_SIZE)
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
# Compile data
model.compile(optimizer = tf.keras.optimizers.Adam(),
loss = tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
model.fit(ds_train, epochs=5, callbacks=[callbacks])
Ctrl + S 키를 누르거나 File(파일) > Save Notebook(노트북 저장)으로 이동하여 변경사항을 저장합니다.
Run(실행) 버튼을 클릭하거나 Shift + Enter 키를 눌러 코드를 실행합니다.
몇 세대 후 학습이 취소되었는지 확인해 보세요.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 콜백 살펴보기
작업 8. 모델을 사용해 실험하기
이 섹션에서는 네트워크의 다양한 레이어를 사용하는 실험을 진행해 봅니다.
연습 1
이 연습에서는 모델의 레이어를 살펴봅니다. 뉴런의 수를 변경하면 어떻게 될까요?
런처를 열고 Python3를 선택하여 새 Jupyter 노트북을 만듭니다.
파일을 updated_model.ipynb라는 이름으로 저장합니다.
아래 코드를 복사하여 updated_model.ipynb의 첫 번째 셀에 붙여넣습니다.
# Import and configure 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
up_logger = logging.getLogger('upLogger')
up_logger.setLevel(logging.INFO)
up_logger.addHandler(CloudLoggingHandler(cloud_logging.Client(), name="updated"))
# Import tensorflow_datasets
import tensorflow_datasets as tfds
# Import numpy
import numpy as np
# Import TensorFlow
import tensorflow as tf
# Define, load and configure data
(ds_train, ds_test), info = tfds.load('fashion_mnist', split=['train', 'test'], with_info=True, as_supervised=True)
# Define batch size
BATCH_SIZE = 32
# Normalizing and batch processing of data
ds_train = ds_train.map(lambda x, y: (tf.cast(x, tf.float32)/255.0, y)).batch(BATCH_SIZE)
ds_test = ds_test.map(lambda x, y: (tf.cast(x, tf.float32)/255.0, y)).batch(BATCH_SIZE)
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
# Compile data
model.compile(optimizer = tf.keras.optimizers.Adam(),
loss = tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
model.fit(ds_train, epochs=5)
# Logs model summary
model.summary(print_fn=up_logger.info)
밀집 레이어에 여러 값을 적용하여 실험해 봅니다.
# Define the model 섹션에서 뉴런 수를 64에서 128로 바꿉니다.
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
Ctrl + S 키를 누르거나 File(파일) > Save Notebook(노트북 저장)으로 이동하여 변경사항을 저장합니다.
Run(실행) 버튼을 클릭하거나 Shift + Enter 키를 눌러 코드를 실행합니다.
손실, 학습 시간 등의 결과가 어떻게 달라졌나요? 달라진 이유가 뭐라고 생각하시나요?
뉴런 수가 128로 늘어나면 계산을 더 많이 해야 합니다. 이에 따라 학습 프로세스의 속도가 저하됩니다. 이 경우 뉴런 수를 늘림으로써 모델이 더 정확해졌기 때문에 긍정적인 영향을 미쳤다고 평가할 수 있습니다. 하지만 '다다익선'이 항상 좋은 것은 아닙니다. 머지않아 수확 체감의 법칙을 체감할 수 있기 때문입니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 연습 1
연습 2
네트워크에 레이어를 추가하면 어떻게 될지 생각해 보세요. 두 개의 밀집 레이어 사이에 또 다른 레이어를 추가하면 어떻게 될까요?
updated_model.ipynb에서 # Define the model 섹션에 레이어를 추가합니다.
모델 정의를 아래 코드로 대체합니다.
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
Ctrl + S 키를 누르거나 File(파일) > Save Notebook(노트북 저장)으로 이동하여 변경사항을 저장합니다.
Run(실행) 버튼을 클릭하거나 Shift + Enter 키를 눌러 코드를 실행합니다.
결과: 상대적으로 단순한 데이터를 사용하고 있기 때문에 그다지 큰 영향을 받지 않습니다. 데이터가 훨씬 더 복잡하다면 추가 레이어가 필요한 경우가 많습니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 연습 2
연습 3
모델을 학습시키기 전에 먼저 픽셀 값을 [0, 1] 범위로 정규화했습니다. 만약 정규화 없이 원래 데이터 세트에서처럼 픽셀 값의 범위가 [0, 255]였다면 어땠을까요?
직접 해 보겠습니다. # Define, load and configure data에서 학습 데이터 세트와 테스트 데이터 세트에 적용되어 있던 매핑 함수를 삭제합니다.
# Define, load and configure data
(ds_train, ds_test), info = tfds.load('fashion_mnist', split=['train', 'test'], with_info=True, as_supervised=True)
# Define batch size
BATCH_SIZE = 32
# Normalizing and batch processing of data
ds_train = ds_train.batch(BATCH_SIZE)
ds_test = ds_test.batch(BATCH_SIZE)
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
이 코드를 셀의 마지막 부분에 추가하여 배치 0에 대한 첫 번째 이미지의 최댓값을 출력하도록 합니다. 정규화하지 않으면 최댓값이 [0, 255] 범위에 속하게 됩니다.
# Print out max value to see the changes
image_batch, labels_batch = next(iter(ds_train))
t_image_batch, t_labels_batch = next(iter(ds_test))
up_logger.info("training images max " + str(np.max(image_batch[0])))
up_logger.info("test images max " + str(np.max(t_image_batch[0])))
updated_model.ipynb 파일의 최종 결과는 다음과 같습니다.
# Import and configure 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
up_logger = logging.getLogger('upLogger')
up_logger.setLevel(logging.INFO)
up_logger.addHandler(CloudLoggingHandler(cloud_logging.Client(), name="updated"))
# Import tensorflow_datasets
import tensorflow_datasets as tfds
# Import numpy
import numpy as np
# Import TensorFlow
import tensorflow as tf
# Define, load and configure data
(ds_train, ds_test), info = tfds.load('fashion_mnist', split=['train', 'test'], with_info=True, as_supervised=True)
# Define batch size
BATCH_SIZE = 32
# Normalizing and batch processing of data
ds_train = ds_train.batch(BATCH_SIZE)
ds_test = ds_test.batch(BATCH_SIZE)
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
# Compile data
model.compile(optimizer = tf.keras.optimizers.Adam(),
loss = tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
model.fit(ds_train, epochs=5)
# Logs model summary
model.summary(print_fn=up_logger.info)
# Print out max value to see the changes
image_batch, labels_batch = next(iter(ds_train))
t_image_batch, t_labels_batch = next(iter(ds_test))
up_logger.info("training images max " + str(np.max(image_batch[0])))
up_logger.info("test images max " + str(np.max(t_image_batch[0])))
Ctrl + S 키를 누르거나 File(파일) > Save Notebook(노트북 저장)으로 이동하여 변경사항을 저장합니다.
Run(실행) 버튼을 클릭하거나 Shift + Enter 키를 눌러 코드를 실행합니다.
# Print out max value to see the changes의 예상 출력
INFO:upLogger:training images max 255
INFO:upLogger:test images max 255
# Define the model 섹션에서 tf.keras.layers.Flatten() 레이어를 삭제합니다.
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
저장하고 updated_model.ipynb에서 셀을 실행합니다.
데이터의 형태에 대한 오류가 표시됩니다. 이는 정상적인 동작입니다.
오류의 세부적인 내용이 지금은 모호해 보일 수 있지만, 이를 통해 네트워크의 첫 번째 레이어가 데이터와 동일한 형태여야 한다는 경험에 따른 원칙을 다시금 확인할 수 있습니다. 지금은 입력 이미지가 28x28 형태이고, 레이어 28개에 뉴런 28개가 있는 구조는 불가능합니다. 따라서 이 28, 28 값을 784x1로 바꾸는 것이 타당해 보입니다.
모든 코드를 직접 작성하는 대신, 앞부분에 Flatten() 레이어를 추가하세요. 나중에 모델에 배열이 로드되면 자동으로 평면화됩니다.
연습 5
최종(출력) 레이어에 주목하세요. 최종 레이어에 뉴런이 10개인 이유는 무엇일까요? 10이 아닌 다른 숫자라면 어떻게 될까요?
5로 네트워크를 학습시켜 직접 알아보겠습니다.
# Define the model 섹션을 아래 코드로 대체하여 이전 섹션에서 적용한 변경사항을 되돌립니다.
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
마지막 레이어의 뉴런 수를 10에서 5로 변경합니다.
# Define the model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(5, activation=tf.nn.softmax)])
저장하고 updated_model.ipynb에서 셀을 실행합니다.
결과: 예상치 못한 값이 발견된 즉시 오류가 표시됩니다.
여기에서 또 다른 경험에 따른 원칙을 알 수 있습니다. 즉, 마지막 레이어의 뉴런 수는 분류하려는 클래스 수와 일치해야 합니다. 이 경우 0에서 9까지 숫자가 총 10개이므로 최종 레이어에 뉴런이 10개여야 합니다.
수고하셨습니다
수고하셨습니다. 이 실습에서는 TensorFlow 모델을 설계하고, 컴파일하고, 학습시키고, 평가하는 방법을 배웠습니다. 모델을 저장 및 로드하고, 자체 콜백을 작성하여 학습 중 동작을 맞춤설정하는 방법도 알아보았습니다. 안내에 따라 네트워크의 다양한 레이어를 실험하는 일련의 연습도 완료해 보았습니다.
Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.
설명서 최종 업데이트: 2024년 9월 12일
실습 최종 테스트: 2024년 9월 12일
Copyright 2025 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.
Labs create a Google Cloud project and resources for a fixed time
Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
On the top left of your screen, click Start lab to begin
Use private browsing
Copy the provided Username and Password for the lab
Click Open console in private mode
Sign in to the Console
Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
Accept the terms, and skip the recovery resource page
Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project
현재 이 콘텐츠를 이용할 수 없습니다
이용할 수 있게 되면 이메일로 알려드리겠습니다.
감사합니다
이용할 수 있게 되면 이메일로 알려드리겠습니다.
One lab at a time
Confirm to end all existing labs and start this one
Use private browsing to run the lab
Use an Incognito or private browser window to run this lab. This
prevents any conflicts between your personal account and the Student
account, which may cause extra charges incurred to your personal account.
이 실습에서는 의류 항목을 인식하는 컴퓨터 비전 모델을 만들고 학습 모델에 영향을 미치는 요소에 대해 알아봅니다.