코딩 환경/PyTorch

1. eval() 함수의 개념과 필요성PyTorch에서 eval()함수는 모델을 평가(evaluation) 모드로 전환하는데 사용된다.모델에 Dropout 레이어나 Batch Normalization 계층이 있는 경우 훈련 모드와 평가 모드에서 모델의 동작이 달라지는 경우가 있기 때문에, eval()함수를 사용해 모델이 평가 단계에서 적절한 동작을 하도록 설정한다.2. eval() 함수를 사용할 때 모델의 주요 변화Dropout 비활성화:모델에 eval()함수를 먹여서 평가 모드로 전환하면, Dropout 계층이 무작위로 뉴런을 끄는 것을 막아 학습을 방해하지 않고 모든 뉴런을 사용한다.Batch Normalization 고정:평가 모드에서는 배치 정규화(BatchNorm) 계층이 새로운 배치 통계를 사..
이번 포스팅은 PyTorch에서 모델을 저장하고 로드하는 방법에 대해 알아본다.간단한 신경망 모델을 만들고 모델의 파라미터를 저장한 후 다시 로드하는 과정을 알아본다.1. 간단한 모델 생성먼저 간단한 모델을 정의하자.torch.nn.Module을 상속받아 신경망 구조를 정의한다.import torchimport torch.nn as nnimport torch.optim as optim# 간단한 모델 정의class SimpleModel(nn.Module): def __init__(self): super(SimpleModel, self).__init__() # 입력이 10차원이고 출력이 1차원인 완전연결층 self.fc = nn.Linear(10, 1) ..
PyTorch에는 작업을 위한 특정 GPU를 지정하는 여러 가지 방법이 있다.이번 포스팅에서는 GPU를 지정하는 여러가지 방법과 각 방법의 특징을 살펴보자.torch.cuda.set_device()이 방법은 PyTorch 연산에 대한 현재 기본 CUDA 디바이스를 명시적으로 설정하는데 사용된다.torch.cuda.set_device()에 디바이스 인덱스나 디바이스 객체를 인수로 전달하여 원하는 GPU를 지정할 수 있다.import torchtorch.cuda.set_device(0) # 디바이스 인덱스 0을 기본 GPU로 설정PyTorch에 특화: 이 방법은 PyTorch에 특화된 방법으로 PyTorch 라이브러리 내에서 기본 CUDA 디바이스를 설정할 수 있다.원하는 GPU 디바이스 인덱스나 객체를 ..
PyTorch에는 CPU에서 GPU에 텐서를 전달할 때 .to('cuda')와 .cuda() 두 가지 방법이 있다.물론 GPU에 바로 텐서를 만들 수도 있다.바로 만드는 방법과 차이점은 이 글에서 확인하자.이제 .to('cuda')와 .cuda() 두 가지 방법의 차이를 알아보자..to('cuda')이 방법은 지정된 디바이스(일반적으로 GPU)로 텐서를 이동시키기 위한 보다 일반적인 방법이다..to('cuda')를 호출하여 텐서를 현재 기본 CUDA 디바이스로 전송할 수 있다.여러 개의 GPU가 있는 경우, PyTorch가 지정한 기본 디바이스(기본적으로는 GPU 0)를 사용한다.근데 .to('cuda:1')과 같이 디바이스 인덱스를 전달하여 다른 디바이스(GPU)을 사용하도록 직접 지정할 수도 있다....
PyTorch에서 GPU로 작업할 때 GPU 디바이스에 데이터를 넘겨주는 여러 가지 방법이 있다.# Approach 1torch.rand(10, 10).cuda()# Approach 2torch.rand(10, 10, device=torch.device('cuda')) 두 가지 방법의 차이와 속도를 비교해 보자.# Approach 1torch.rand(10, 10).cuda()이 방법에서 torch.rand 함수는 CPU에서 임의의 텐서를 생성한다.그런 다음 .cuda() 메서드가 텐서에서 호출되어 텐서를 CPU에서 GPU로 이동한다.이 연산은 inplace로 수행되어 원래 텐서를 수정하고 GPU에 동일한 텐서를 반환하는 형태로 작동한다. # Approach 2torch.rand(10, 10, devic..
이번 포스팅의 주제는 오랜만에 머신러닝과 직접적으로 관련된 이야기이다.코드의 실행 속도를 높이는 것과 관련된 것으로 하이퍼파라미터의 최적화를 통한 빠른 학습과 관련되어 있다.이 글은 하이퍼 파라미터 중 num_workers에 대한 내용을 살펴보자.num_workers을 설정할 때 4의 배수로 설정하라는 소리는 어디선가 들어봤을 것이다.num_workers가 무엇이고 어떻게 설정하면 좋은지 알아보자.num_workers 이란DataLoader(dataset, num_workers=8)PyTorch의 DataLoader 클래스는 대규모 데이터셋을 효율적으로 로딩하고 전처리하기 위한 강력한 도구이다.대용량 데이터셋을 다룰 때 데이터 로딩은 훈련 과정에서 중요한 병목 현상이 될 수 있다.이때 num_worker..
이전 글에서 TensorBoard가 무엇이고 어떻게 사용하는지 살펴보았다.하지만 이 방법으로는 원격 서버에서 학습을 할 때 텐서보드를 실행해도 로컬에서는 모니터링이 불가능하다.이번 포스팅에서는 port forwarfing(포트 포워딩)을 통해 서버에서 학습을 돌리고 로컬에서 그 과정을 모니터링하는 방법을 살펴보자.Port Forwarding 이란먼저 port forwarfing(포트 포워딩)이 무엇인지 간단히 살펴보자.포트 포워딩은 컴퓨터의 한 포트에서 다른 컴퓨터의 다른 포트로 네트워크 트래픽을 리디렉션할 수 있는 기능이다.일반적으로 방화벽이나 NAT(네트워크 주소 변환)뒤에 있는 컴퓨터에서 실행되는 서비스에 대한 원격 엑세스를 활성화하는데 사용된다. 컴퓨터가 여러 개의 방이 있는 집이고 각 방에는 문..
TensorBoard 텐서보드 소개TensorBoard(텐서보드)는 오픈 소스 머신러닝 프레임워크인 TensorFlow에서 제공하는 시각화 도구이다.텐서보드는 머신러닝 모델의 다양한 부분을 시각적으로 모니터링하고 분석할 수 있다.텐서보드를 사용하면 모델 아키텍쳐를 보거다 메트릭을 추적 및 시각화하고 트레이닝 커브를 모니터링하는 등 모니터링하고 싶은 웬만한 것들을 전부 시각화할 수 있다.또한 사용법도 어렵지 않고 직관적인 웹 기반 인터페이스를 제공하며 PyTorch를 비롯한 여러 프레임워크와 호환되기 때문에 많은 딥러닝 커뮤니티에서 텐서보드를 애용한다.이번 포스팅에서는 텐서보드 사용법을 PyTorch 예제를 통해 알아보자.TensorBoard 설치텐서보드를 파이토치와 함께 사용하려면 텐서보드가 포함된 텐서..
Custom Dataset의 필요성MNIST 또는 CIFAR-10과 같이 PyTorch의 기본 제공 데이터 세트에서 직접 로드할 수 있는 형식이 아닌 데이터 세트가 있는 경우 CustomDataset이 필요하다.즉, 사용자 지정 형식의 데이터셋이 있을 때, 데이터를 제대로 처리하려면 Dataset의 하위 클래스인 CustomDataset을 만들어야 한다.예를 들어, 이미지 데이터 세트가 있는 경우 데이터 세트에서 이미지와 해당 레이블을 로드할 CustomDataset을 만들어야한다는 이야기다. 이 글에서는 Dataset와 DataLoader 클래스를 알아보고 어떻게 Custom Dataset을 사용할 수 있는지 알아보자.Dataset와 CustomDataset의 다른 점 이해하기PyTorch Datase..
PyTorch에서는 GPU을 사용하여 모델의 트레이닝 속도를 높일 수 있다.모델을 트레이닝 하는데 GPU을 사용하려면 데이터와 모델을 GPU에 할당해야한다.이때 텐서나 모델을 GPU에 올리는 두 가지 방법이 있는데 이번 글에서는 두 가지 방법과 그 차이점을 살펴보자.GPU을 사용하는 두 가지 방법PyTorch에서 텐서나 모델을 GPU에 할당할 때 두 가지 방법이 있는데 .to(device)와 .cuda()이다.먼적 GPU에 올리는 방법을 각각 알아보자. 먼저 .to(device)은 CPU, GPU 및 TPU를 포함한 모든 장치로 텐서나 모델을 이동할 수 있는 일반적인 방법이다.보통 아래와 같은 방법으로 사용한다.import torch# Create a tensor on the CPUx = torch.ra..
아니그니까
'코딩 환경/PyTorch' 카테고리의 글 목록