> 기술 주변기기 > 일체 포함 > TensorFlow를 사용한 이미지 분류 모델 학습 가이드

TensorFlow를 사용한 이미지 분류 모델 학습 가이드

PHPz
풀어 주다: 2023-04-13 17:13:03
앞으로
1270명이 탐색했습니다.

번역가 | Chen Jun

리뷰어 | Sun Shujuan

우리 모두 알고 있듯이 인간은 아주 어린 나이에 자신이 보는 것을 식별하고 라벨을 붙이는 법을 배웁니다. 오늘날 머신러닝과 딥러닝 알고리즘이 지속적으로 반복되면서 컴퓨터는 캡처한 이미지를 대규모로 매우 정확하게 분류할 수 있게 되었습니다. 현재 이러한 고급 알고리즘의 적용 시나리오에는 폐 스캔 이미지를 해석하여 건강한지 확인하고, 모바일 장치를 통해 얼굴 인식을 수행하고, 소매업체를 위한 다양한 유형의 소비자 개체를 구별하는 작업이 포함됩니다.

아래에서는 컴퓨터 비전의 응용(이미지 분류)에 대해 논의하고 TensorFlow를 사용하여 작은 이미지 데이터 세트에서 모델을 훈련하는 방법을 단계별로 보여줍니다.

1. 데이터 세트 및 타겟

이 예에서는 0부터 9까지의 숫자 이미지로 구성된 MNIST 데이터 세트를 사용합니다. 모양은 아래 그림과 같습니다.

TensorFlow를 사용한 이미지 분류 모델 학습 가이드

이 모델을 훈련하는 목적은 이미지를 각 레이블 아래, 즉 위 그림의 해당 번호로 분류하는 것입니다. 일반적으로 심층 신경망 아키텍처는 모델 학습을 위해 입력, 출력, 두 개의 숨겨진 레이어(Hidden Layers) 및 드롭아웃 레이어를 제공합니다. CNN 또는 Convolutional Neural Network는 더 큰 이미지를 식별하기 위한 첫 번째 선택입니다. 입력량을 줄이면서 관련 정보를 캡처할 수 있습니다.

2. 준비

먼저 신경망 아키텍처 코드베이스 구축을 위해 TensorFlow, to_categorical(숫자 클래스 값을 다른 카테고리로 변환하는 데 사용), Sequential, Flatten, Dense 및 Dropout을 통해 관련 데이터를 모두 가져옵니다. . 여기에 언급된 코드 라이브러리 중 일부는 여러분에게 약간 생소할 수 있습니다. 아래에서 자세히 설명하겠습니다.

3. 하이퍼파라미터

  • 다음 측면을 통해 올바른 하이퍼파라미터 세트를 선택하겠습니다.

  • 먼저 몇 가지 하이퍼파라미터를 시작점으로 정의하겠습니다. 나중에 다양한 요구 사항에 맞게 조정할 수 있습니다. 여기서는 더 작은 배치 크기로 128을 선택했습니다. 실제로 배치 크기는 어떤 값이든 가질 수 있지만 크기 2의 거듭제곱은 메모리 효율성을 향상시키는 경우가 많으므로 이것이 첫 번째 선택이 되어야 합니다. 적절한 배치 크기를 결정하는 주된 이유는 배치 크기가 너무 작으면 수렴이 너무 번거로워지고 배치 크기가 너무 크면 컴퓨터 메모리에 맞지 않을 수 있다는 것입니다.
  • 모델의 빠른 학습을 달성하기 위해 Epoch(훈련 세트의 각 샘플이 하나의 훈련에 참여) 수를 50으로 유지하겠습니다. epoch 값이 낮을수록 작고 간단한 데이터 세트에 더 적합합니다.
  • 다음으로 숨겨진 레이어를 추가해야 합니다. 여기서는 각 숨겨진 레이어에 대해 128개의 뉴런을 예약했습니다. 물론 64개 및 32개 뉴런으로 테스트할 수도 있습니다. 이 경우 MINST와 같은 간단한 데이터 세트의 경우 더 높은 값을 사용하지 않는 것이 좋습니다.
  • 0.01, 0.05, 0.1 등 다양한 학습률을 시도해 볼 수 있습니다. 이 경우에는 0.01로 유지합니다.
  • 다른 초매개변수의 경우 붕괴 단계와 붕괴율을 각각 2000과 0.9로 선택합니다. 그리고 훈련이 진행됨에 따라 학습 속도를 줄이는 데 사용될 수 있습니다.
  • 여기에서는 Adamax를 최적화 프로그램으로 선택했습니다. 물론 Adam, RMSProp, SGD 등과 같은 다른 최적화 프로그램을 선택할 수도 있습니다.
import tensorflow as tf
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense, Dropout
params = {
'dropout': 0.25,
'batch-size': 128,
'epochs': 50,
'layer-1-size': 128,
'layer-2-size': 128,
'initial-lr': 0.01,
'decay-steps': 2000,
'decay-rate': 0.9,
'optimizer': 'adamax'
}
mnist = tf.keras.datasets.mnist
num_class = 10
# split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# reshape and normalize the data
x_train = x_train.reshape(60000, 784).astype("float32")/255
x_test = x_test.reshape(10000, 784).astype("float32")/255
# convert class vectors to binary class matrices
y_train = to_categorical(y_train, num_class)
y_test = to_categorical(y_test, num_class)
로그인 후 복사

4. 훈련 및 테스트 세트 만들기

TensorFlow 라이브러리에는 MNIST 데이터 세트도 포함되어 있으므로 객체에 대해datasets.mnist를 호출한 다음 load_data() 샘플을 호출하여 훈련(60,000)을 얻을 수 있습니다. ) 및 테스트(10,000개 샘플) 데이터 세트.

다음으로 훈련 및 테스트 이미지의 모양을 변경하고 정규화해야 합니다. 그 중에서 정규화는 이미지의 픽셀 강도를 0과 1 사이로 제한합니다.

마지막으로 앞서 가져온 to_categorical 메서드를 사용하여 훈련 및 테스트 레이블을 분류된 레이블로 변환합니다. 이는 출력 레이블(예: 0~9)이 숫자 유형이 아닌 클래스임을 TensorFlow 프레임워크에 전달하는 데 매우 중요합니다.

5. 신경망 아키텍처 설계

이제 신경망 아키텍처를 구체적으로 설계하는 방법을 알아보겠습니다.

DNN(Deep Neural Network)의 구조를 정의하기 위해 Flatten을 추가하여 2D 이미지 매트릭스를 벡터로 변환합니다. 여기서 입력 뉴런은 벡터의 숫자에 해당합니다.

다음으로 Dense() 메서드를 사용하여 두 개의 숨겨진 Dense 레이어를 추가하고 이전에 정의된 "params" 사전에서 각 하이퍼파라미터를 추출합니다. 이러한 레이어의 활성화 함수로 "relu"(Rectified Linear Unit)를 사용할 수 있습니다. 신경망의 은닉층에서 가장 일반적으로 사용되는 활성화 함수 중 하나입니다.

그런 다음 Dropout 메서드를 사용하여 Dropout 레이어를 추가합니다. 신경망을 훈련할 때 과적합을 방지하는 데 사용됩니다. 결국 과대적합 모델은 훈련 세트를 정확하게 기억하는 경향이 있으며 보이지 않는 데이터 세트로 일반화하는 데 실패합니다.

输出层是我们网络中的最后一层,它是使用Dense() 方法来定义的。需要注意的是,输出层有10个神经元,这对应于类(数字)的数量。

# Model Definition
# Get parameters from logged hyperparameters
model = Sequential([
Flatten(input_shape=(784, )),
Dense(params('layer-1-size'), activatinotallow='relu'),
Dense(params('layer-2-size'), activatinotallow='relu'),
Dropout(params('dropout')),
Dense(10)
])
lr_schedule =
tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=experiment.get_parameter('initial-lr'),
decay_steps=experiment.get_parameter('decay-steps'),
decay_rate=experiment.get_parameter('decay-rate')
)
loss_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adamax',
loss=loss_fn,
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=experiment.get_parameter('batch-size'),
epochs=experiment.get_parameter('epochs'),
validation_data=(x_test, y_test),)
score = model.evaluate(x_test, y_test)
# Log Model
model.save('tf-mnist-comet.h5')
로그인 후 복사

6、训练

至此,我们已经定义好了架构。下面让我们用给定的训练数据,来编译和训练神经网络。

首先,我们以初始学习率、衰减步骤和衰减率作为参数,使用ExponentialDecay(指数衰减学习率)来定义学习率计划。

其次,将损失函数定义为CategoricalCrossentropy(用于多类式分类)。

接着,通过将优化器 (即:adamax)、损失函数、以及各项指标(由于所有类都同等重要、且均匀分布,因此我选择了准确性)作为参数,来编译模型。

然后,我们通过使用x_train、y_train、batch_size、epochs和validation_data去调用一个拟合方法,并拟合出模型。

同时,我们调用模型对象的评估方法,以获得模型在不可见数据集上的表现分数。

最后,您可以使用在模型对象上调用的save方法,保存要在生产环境中部署的模型对象。

7、小结

综上所述,我们讨论了为图像分类任务,训练深度神经网络的一些入门级的知识。您可以将其作为熟悉使用神经网络,进行图像分类的一个起点。据此,您可了解到该如何选择正确的参数集、以及架构背后的思考逻辑。

原文链接:https://www.kdnuggets.com/2022/12/guide-train-image-classification-model-tensorflow.html

위 내용은 TensorFlow를 사용한 이미지 분류 모델 학습 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿