>  기사  >  백엔드 개발  >  PHP와 PyTorch를 사용한 딥 러닝

PHP와 PyTorch를 사용한 딥 러닝

WBOY
WBOY원래의
2023-06-19 14:43:381176검색

딥러닝은 인공지능 분야에서 중요한 분야로 최근 몇 년간 점점 더 많은 관심과 관심을 받고 있습니다. 딥 러닝 연구 및 응용을 수행하려면 이를 달성하는 데 도움이 되는 일부 딥 러닝 프레임워크를 사용해야 하는 경우가 많습니다. 이번 글에서는 딥러닝에 PHP와 PyTorch를 활용하는 방법을 소개하겠습니다.

1. PyTorch란 무엇입니까

PyTorch는 Facebook에서 개발한 오픈 소스 기계 학습 프레임워크로, 딥 러닝 모델을 빠르게 생성하고 훈련하는 데 도움이 됩니다. PyTorch의 특징은 동적 컴퓨팅 그래프를 사용하여 모델 훈련 및 최적화를 달성한다는 것입니다. 이 방법을 사용하면 복잡한 딥 러닝 모델을 보다 유연하게 만들 수 있습니다. 동시에 PyTorch는 사전 훈련된 풍부한 모델과 알고리즘을 제공하여 딥 러닝 연구와 애플리케이션을 보다 편리하게 수행하는 데 도움이 됩니다.

2. PHP와 PyTorch를 사용하는 이유

다른 프로그래밍 언어에 비해 Python은 딥러닝 분야에서 매우 인기 있고 널리 사용되는 언어입니다. Python에는 딥 러닝 모델을 쉽게 사용하고 배포할 수 있는 풍부한 타사 라이브러리와 오픈 소스 도구가 있습니다. 한편, PHP는 웹 애플리케이션 및 웹 사이트 개발에 널리 사용되는 또 다른 프로그래밍 언어입니다. PHP와 PyTorch를 사용하면 웹 애플리케이션과 웹사이트에 딥 러닝 모델을 적용하여 다양한 지능형 기능을 달성하는 데 도움이 될 수 있습니다. 예를 들어 딥러닝 모델을 웹 애플리케이션에 내장해 얼굴 인식, 이미지 분류 등의 기능을 구현하고, PHP를 통해 프런트엔드와 상호작용해 사용자에게 더 나은 경험을 제공할 수 있습니다.

3. 딥러닝에 PHP와 PyTorch를 사용하세요

아래에서는 딥러닝에 PHP와 PyTorch를 사용하는 방법을 소개하겠습니다.

  1. PyTorch 설치

시작하기 전에 먼저 PyTorch 라이브러리를 설치해야 합니다. 설치에 대한 PyTorch 공식 문서(https://pytorch.org/get-started/locally/)를 참조할 수 있습니다.

  1. Python 스크립트 작성

다음으로 간단한 Python 스크립트를 작성하여 딥 러닝 모델을 생성하고 훈련하겠습니다. 이 모델은 손으로 쓴 숫자를 분류하는 데 사용됩니다.

먼저 PyTorch 라이브러리와 기타 필수 라이브러리를 가져와야 합니다.

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

그런 다음 신경망 모델을 정의합니다.

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.dropout = nn.Dropout2d()
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        x = nn.functional.relu(nn.functional.max_pool2d(self.conv1(x), 2))
        x = nn.functional.relu(nn.functional.max_pool2d(self.dropout(self.conv2(x)), 2))
        x = x.view(-1, 320)
        x = nn.functional.relu(self.fc1(x))
        x = nn.functional.dropout(x, training=self.training)
        x = self.fc2(x)
        return nn.functional.log_softmax(x, dim=1)

이 신경망 모델에는 2개의 컨볼루션 레이어와 2개의 완전 연결 레이어가 포함되어 있습니다. 그 중 Convolutional Layer는 입력 영상의 특징을 추출하는 데 사용되고, Fully Connected Layer는 분류 결과를 출력하는 데 사용됩니다. 순방향 전파 중에는 ReLU를 활성화 함수로 사용하고 최대 풀링 및 드롭아웃을 사용하여 모델이 더 잘 일반화되도록 돕습니다.

다음으로 몇 가지 하이퍼 매개변수와 훈련 매개변수를 정의해야 합니다.

batch_size = 64
learning_rate = 0.01
momentum = 0.5
epochs = 10

이 예에서는 간단한 배치 확률적 경사하강법 알고리즘(SGD)을 사용하여 모델을 최적화합니다. 각 시대마다 훈련 데이터를 배치로 나누고 각 배치를 훈련하고 최적화합니다. 훈련 과정에서 우리는 훈련 세트와 테스트 세트의 손실과 정확도를 계산하고 기록합니다.

train_loader = DataLoader(
    datasets.MNIST('./data', train=True, download=True, transform=transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])),
    batch_size=batch_size, shuffle=True)
test_loader = DataLoader(
    datasets.MNIST('./data', train=False, transform=transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])),
    batch_size=batch_size, shuffle=True)

model = Net()
optimizer = optim.SGD(model.parameters(), lr=learning_rate, momentum=momentum)

train_loss_history = []
train_acc_history = []
test_loss_history = []
test_acc_history = []

for epoch in range(1, epochs + 1):
    # Train
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        output = model(data)
        loss = nn.functional.nll_loss(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 10 == 0:
            print('Epoch [{}/{}], Train Batch: [{}/{}], Train Loss: {:.6f}'.format(epoch, epochs, batch_idx, len(train_loader), loss.item()))
    # Evaluate
    model.eval()
    train_loss = 0
    train_correct = 0
    test_loss = 0
    test_correct = 0
    with torch.no_grad():
        for data, target in train_loader:
            output = model(data)
            train_loss += nn.functional.nll_loss(output, target, reduction='sum').item()
            pred = output.argmax(dim=1, keepdim=True)
            train_correct += pred.eq(target.view_as(pred)).sum().item()
        train_loss /= len(train_loader.dataset)
        train_acc = 100. * train_correct / len(train_loader.dataset)
        train_loss_history.append(train_loss)
        train_acc_history.append(train_acc)
        for data, target in test_loader:
            output = model(data)
            test_loss += nn.functional.nll_loss(output, target, reduction='sum').item()
            pred = output.argmax(dim=1, keepdim=True)
            test_correct += pred.eq(target.view_as(pred)).sum().item()
        test_loss /= len(test_loader.dataset)
        test_acc = 100. * test_correct / len(test_loader.dataset)
        test_loss_history.append(test_loss)
        test_acc_history.append(test_acc)
        print('Epoch {}: Train Loss: {:.6f}, Train Acc: {:.2f}%, Test Loss: {:.6f}, Test Acc: {:.2f}%'.format(epoch, train_loss, train_acc, test_loss, test_acc))
  1. PHP를 사용하여 Python 스크립트 호출

간단한 딥러닝 모델의 생성 및 학습을 완료했으므로 다음으로 PHP를 사용하여 Python 스크립트를 호출하고 학습된 모델을 실제로 사용하는 방법을 소개하겠습니다. 애플리케이션.

PHP의 exec 함수를 사용하여 Python 스크립트를 호출할 수 있습니다. 예를 들면 다음과 같습니다.

$output = exec("python train.py 2>&1", $output_array);

이 명령은 train.py 스크립트를 실행하고 출력 결과를 $output_array 배열에 저장합니다. 교육 과정에 시간이 많이 걸리는 경우 PHP의 플러시 기능을 사용하여 실시간 출력을 얻을 수 있습니다. 예:

echo '
';
$output = exec("python train.py 2>&1", $output_array);
foreach ($output_array as $o) {
    echo $o . '
'; flush(); } echo '
';

이러한 방식으로 딥 러닝 모델을 PHP 애플리케이션에 통합하고 이를 사용하여 다양한 지능형 기능을 제공할 수 있습니다. 기능.

4. 요약

이 글에서는 간단한 필기 숫자 분류 모델 생성 및 학습을 포함하여 딥 러닝에 PHP와 PyTorch를 사용하는 방법과 이 모델을 PHP 애플리케이션에 포함시키는 방법을 소개합니다. 이러한 방식으로 다양한 웹 애플리케이션과 웹사이트에 딥러닝 모델을 적용해 보다 지능적인 기능과 서비스를 제공할 수 있습니다.

위 내용은 PHP와 PyTorch를 사용한 딥 러닝의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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