>  기사  >  백엔드 개발  >  Python의 컨벌루션 신경망 알고리즘 예제

Python의 컨벌루션 신경망 알고리즘 예제

王林
王林원래의
2023-06-11 12:37:371449검색

CNN(Convolutional Neural Network)은 이미지 인식, 음성 인식, 자연어 처리 및 기타 분야에서 널리 사용되는 신경망 알고리즘입니다. 생물학적 뉴런의 구조를 활용하고, 입력 데이터의 2차원 공간 구조를 처리하며, 컨볼루션 계층과 풀링 계층에서 가중치 공유 방식을 채택하여 최적화해야 하는 매개변수의 수를 크게 줄여 성능을 향상시킵니다. 모델의 일반화 능력 및 효율성.

Python은 과학 컴퓨팅, 기계 학습 및 딥 러닝 분야에서 널리 사용되는 프로그래밍 언어로, 간단하고 사용하기 쉽고, 오픈 소스이며 무료이며, 타사 라이브러리가 풍부하다는 장점이 있습니다. 점점 더 많은 연구원과 엔지니어가 개발하고 있습니다. Python에서는 Keras, TensorFlow, PyTorch 등을 포함한 다양한 딥 러닝 프레임워크를 사용하여 컨볼루션 신경망 알고리즘을 구현할 수 있습니다.

아래에서는 Keras 프레임워크를 사용하여 Python에서 컨벌루션 신경망 알고리즘을 구현하는 방법을 예제를 사용하여 소개하겠습니다.

데이터 세트 소개

이 예제에서는 10개 카테고리에 60,000개의 32x32 컬러 이미지가 포함된 CIFAR-10 데이터 세트를 사용하며 각 카테고리의 이미지 수는 6,000개입니다. 이러한 이미지는 훈련 세트와 테스트 세트로 나누어지며, 훈련 세트에는 50,000개의 이미지, 테스트 세트에는 10,000개의 이미지가 있습니다.

Python에서는 아래와 같이 Keras 라이브러리에서 제공하는 cifar10.load_data 함수를 사용하여 CIFAR-10 데이터 세트를 로드할 수 있습니다.

from keras.datasets import cifar10

(x_train, y_train), (x_test, y_test) = cifar10.load_data()

여기서, x_train 및 x_test는 훈련 세트와 테스트 세트의 이미지 데이터입니다. 각각 y_train과 y_test는 각각 훈련 세트와 테스트 세트의 라벨입니다.

모델 구성

이 예제에 사용된 컨벌루션 신경망 모델은 여러 컨볼루셔널 레이어, 풀링 레이어 및 완전 연결 레이어를 포함합니다. 구체적인 구조는 다음과 같습니다.

  1. 입력 레이어: 입력 이미지의 크기는 32x32x3입니다. 3은 RGB 3채널을 의미합니다.
  2. 콘볼루션 레이어 1: 3x3 크기의 콘볼루션 커널 32개를 사용하고 스트라이드는 1이며 활성화 함수는 ReLU입니다.
  3. 콘볼루션 레이어 2: 크기가 3x3인 64개의 콘볼루션 커널을 사용하고 스트라이드는 1이며 활성화 함수는 ReLU입니다.
  4. 풀링 레이어 1: 스트라이드가 2인 2x2 크기의 풀링 커널을 사용합니다.
  5. 콘볼루션 레이어 3: 3x3 크기의 128개의 콘볼루션 커널을 사용하고 스트라이드는 1이며 활성화 함수는 ReLU입니다.
  6. 풀링 레이어 2: 스트라이드가 2인 2x2 크기의 풀링 커널을 사용합니다.
  7. 완전 연결 레이어 1: 128개의 뉴런을 포함하고 활성화 함수는 ReLU입니다.
  8. 완전 연결 레이어 2: 10개의 범주에 해당하는 10개의 뉴런을 포함하며 활성화 함수는 Softmax입니다.

Python에서는 아래와 같이 Keras 라이브러리에서 제공하는 Sequential 클래스를 통해 모델을 레이어별로 구축할 수 있습니다.

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation='relu', input_shape=(32, 32, 3)))
model.add(Conv2D(filters=64, kernel_size=(3, 3), strides=(1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Conv2D(filters=128, kernel_size=(3, 3), strides=(1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=10, activation='softmax'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

그 중 Conv2D 클래스는 컨볼루션 레이어를 나타내고, MaxPooling2D 클래스는 풀링 레이어를 나타내며, Flatten 클래스는 다차원을 나타냅니다. 입력은 1차원이고 Dense 클래스는 완전 연결 레이어를 나타냅니다. model.compile 함수는 모델을 컴파일하고 최적화 알고리즘, 손실 함수, 평가 지수 등을 지정하는 데 사용됩니다.

모델 훈련 및 평가

모델이 구축된 후에는 훈련 세트 데이터를 사용하여 모델을 훈련할 수 있습니다. Python에서는 아래와 같이 fit 함수를 사용하여 모델 훈련을 구현할 수 있습니다.

from keras.utils import np_utils

y_train = np_utils.to_categorical(y_train, 10)
y_test = np_utils.to_categorical(y_test, 10)

model.fit(x_train, y_train, epochs=10, batch_size=64, validation_data=(x_test, y_test))

그 중 np_utils.to_categorical 함수는 레이블을 원-핫 인코딩으로 변환하는 데 사용됩니다. 적합 함수는 훈련 라운드 수, 배치 크기, 검증 세트 데이터 등을 지정하여 모델을 훈련하는 데 사용됩니다. 훈련이 완료된 후 아래와 같이 평가 기능을 사용하여 모델을 평가할 수 있습니다.

loss, accuracy = model.evaluate(x_test, y_test)

이 예에서 10회 훈련 후 테스트 세트의 모델 정확도는 0.7318입니다.

요약

이 글에서는 Keras 프레임워크를 사용하여 합성곱 신경망 알고리즘을 Python으로 구현하는 예를 소개합니다. CIFAR-10 데이터 세트와 특정 모델 구조를 사용하여 Python에서 컨벌루션 신경망을 구축, 훈련 및 평가하는 방법을 배울 수 있습니다. 또한 모델의 구조와 매개변수를 조정하여 모델의 성능을 더욱 향상시킬 수 있습니다.

위 내용은 Python의 컨벌루션 신경망 알고리즘 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.