>  기사  >  기술 주변기기  >  PyTorch를 사용하여 컨벌루션 신경망을 구축하는 기본 단계

PyTorch를 사용하여 컨벌루션 신경망을 구축하는 기본 단계

PHPz
PHPz앞으로
2024-01-24 09:21:10420검색

PyTorch를 사용하여 컨벌루션 신경망을 구축하는 기본 단계

CNN(Convolutional Neural Network)은 컴퓨터 비전 작업에 널리 사용되는 딥 러닝 모델입니다. 완전히 연결된 신경망과 비교하여 CNN은 더 적은 수의 매개변수와 더 강력한 특징 추출 기능을 갖추고 있으며 이미지 분류, 대상 감지, 이미지 분할과 같은 작업에서 우수한 성능을 발휘합니다. 아래에서는 기본적인 CNN 모델을 구축하는 방법을 소개합니다.

CNN(컨볼루셔널 신경망)은 여러 컨볼루션 레이어, 풀링 레이어, 활성화 기능 및 완전 연결 레이어를 갖춘 딥 러닝 모델입니다. Convolutional Layer는 CNN의 핵심 구성요소로 입력 이미지의 특징을 추출하는 데 사용됩니다. 풀링 레이어는 특징 맵의 크기를 줄이고 이미지의 주요 특징을 보존할 수 있습니다. 활성화 함수는 모델의 표현 능력을 높이기 위해 비선형 변환을 도입합니다. 완전 연결 레이어는 기능 맵을 출력 결과로 변환합니다. 이러한 구성 요소를 결합하여 기본 컨볼루션 신경망을 구축할 수 있습니다. CNN은 이미지 분류, 타겟 탐지, 이미지 생성 등의 작업에 탁월한 성능을 발휘하며 컴퓨터 비전 분야에서 널리 사용됩니다.

두 번째로 CNN의 구조를 위해서는 각 컨볼루션 레이어와 풀링 레이어의 매개변수를 결정해야 합니다. 이러한 매개변수에는 컨볼루션 커널의 크기, 컨볼루션 커널의 수, 풀링 커널의 크기가 포함됩니다. 동시에 입력 데이터의 차원과 출력 데이터의 차원을 결정하는 것도 필요합니다. 이러한 매개변수의 선택은 일반적으로 실험적으로 결정되어야 합니다. 일반적인 접근 방식은 먼저 간단한 CNN 모델을 구축한 다음 최적의 성능이 달성될 때까지 매개변수를 점진적으로 조정하는 것입니다.

CNN 모델을 훈련할 때 손실 함수와 최적화 기능을 설정해야 합니다. 일반적으로 교차 엔트로피 손실 함수가 널리 사용되며, 확률적 경사하강법 최적화도 일반적인 선택입니다. 훈련 과정에서 우리는 훈련 데이터를 CNN 모델에 일괄적으로 입력하고 손실 함수를 기반으로 손실 값을 계산합니다. 그런 다음 최적화 프로그램을 사용하여 모델 매개변수를 업데이트하여 손실 값을 줄입니다. 일반적으로 훈련을 완료하려면 여러 번의 반복이 필요하며, 각 반복은 미리 결정된 훈련 에포크 수에 도달하거나 특정 성능 기준이 충족될 때까지 훈련 데이터를 모델에 일괄적으로 공급합니다.

다음은 PyTorch를 사용하여 기본 CNN(컨볼루션 신경망)을 구축하기 위한 코드 예제입니다.

import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5) # 3个输入通道,6个输出通道,5x5的卷积核
        self.pool = nn.MaxPool2d(2, 2) # 2x2的最大池化层
        self.conv2 = nn.Conv2d(6, 16, 5) # 6个输入通道,16个输出通道,5x5的卷积核
        self.fc1 = nn.Linear(16 * 5 * 5, 120) # 全连接层1,输入大小为16x5x5,输出大小为120
        self.fc2 = nn.Linear(120, 84) # 全连接层2,输入大小为120,输出大小为84
        self.fc3 = nn.Linear(84, 10) # 全连接层3,输入大小为84,输出大小为10(10个类别)

    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x))) # 第一层卷积+激活函数+池化
        x = self.pool(torch.relu(self.conv2(x))) # 第二层卷积+激活函数+池化
        x = x.view(-1, 16 * 5 * 5) # 将特征图展开成一维向量
        x = torch.relu(self.fc1(x)) # 第一层全连接+激活函数
        x = torch.relu(self.fc2(x)) # 第二层全连接+激活函数
        x = self.fc3(x) # 第三层全连接
        return x

위 코드는 nn.Module에서 상속되는 Net이라는 클래스를 정의합니다. 이 클래스에는 컨벌루션 레이어, 풀링 레이어, 완전 연결 레이어뿐만 아니라 모델의 순방향 전파 프로세스를 정의하는 데 사용되는 순방향 메서드도 포함되어 있습니다. __init__ 메소드에서는 2개의 컨벌루션 레이어, 3개의 완전 연결 레이어 및 풀링 레이어를 정의합니다. 순방향 방법에서는 이러한 레이어를 순서대로 호출하고 ReLU 활성화 함수를 사용하여 컨벌루션 레이어와 완전 연결 레이어의 출력을 비선형적으로 변환합니다. 마지막으로 마지막 완전 연결 레이어의 출력을 모델 예측으로 반환합니다. 추가하려면 이 CNN 모델의 입력은 (batch_size, 채널, 높이, 너비) 모양의 4차원 텐서여야 합니다. 그 중, Batch_size는 입력 데이터의 배치 크기, 채널은 입력 데이터의 채널 수, height와 width는 각각 입력 데이터의 높이와 너비입니다. 이 예에서 입력 데이터는 채널 수가 3개인 RGB 컬러 이미지여야 합니다.

위 내용은 PyTorch를 사용하여 컨벌루션 신경망을 구축하는 기본 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 163.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제