pytorch gpu 예제

위의 PyTorch 자동 그라드 예제와 대조적으로, 여기서는 TensorFlow를 사용하여 간단한 2계층 그물에 맞춥습니다: __init__ 함수는 모델의 두 선형 레이어를 초기화합니다. PyTorch는 지정한 매개 변수의 적절한 초기화를 처리합니다. 전달 함수에서 먼저 첫 번째 선형 레이어를 적용하고 ReLU 활성화를 적용한 다음 두 번째 선형 레이어를 적용합니다. 모듈은 x의 첫 번째 차원이 일괄 처리 크기라고 가정합니다. 네트워크에 대한 입력이 단순히 차원 100의 벡터이고 배치 크기가 32인 경우 x의 치수는 32,100이 됩니다. 모델을 정의하고 정방향 패스를 계산하는 방법의 예를 살펴보겠습니다: PyTorch에는 torch.nn 모듈에서 사용할 수 있는 많은 표준 손실 함수가 함께 제공됩니다. 다음은 교차 엔트로피 손실을 계산하는 방법의 간단한 예입니다. 모델이 C 레이블을 사용하면 다중 클래스 분류 문제를 해결한다고 가정해 보겠습니다. 그런 다음 크기 N의 일괄 처리에 대해 모델을 통해 입력 배치를 전달하여 얻은 치수 NxC의 PyTorch 변수가 out입니다. 또한 크기 N의 대상 변수가 있는데, 여기서 각 요소는 해당 예제의 클래스인 [0,…,C-1]의 레이블입니다. 손실 함수를 정의하고 다음과 같이 손실을 계산할 수 있습니다.

정적 및 동적 그래프가 다른 한 가지 측면은 제어 흐름입니다. 일부 모델의 경우 각 데이터 포인트에 대해 서로 다른 계산을 수행할 수 있습니다. 예를 들어 각 데이터 포인트에 대해 서로 다른 시간 단계에 대해 되풀이 네트워크가 해제될 수 있습니다. 이 언롤링은 루프로 구현할 수 있습니다. 정적 그래프를 사용하면 루프 구문이 그래프의 일부가 되어야 합니다. 이러한 이유로 TensorFlow는 그래프에 루프를 포함하기 위한 tf.scan과 같은 연산자에게 제공합니다. 동적 그래프를 사용하면 상황이 더 간단합니다: 각 예제에 대해 즉석에서 그래프를 작성하기 때문에 일반 명령 흐름 제어를 사용하여 각 입력마다 다른 계산을 수행할 수 있습니다. 참고: 이러한 예제는 PyTorch 0.4에 대해 업데이트되었으며, 이 예제는 핵심 PyTorch API에 몇 가지 중요한 변경 사항을 변경했습니다. 특히 0.4 텐서 이전에는 오토그라드를 사용하기 위해 가변 객체에 래핑해야 했습니다. 이제 이 기능이 텐서에 직접 추가되었으며 변수는 더 이상 사용되지 않습니다. 토치.nn.Module 클래스를 하위 분류하여 PyTorch에서 모델을 정의할 수 있습니다. 모델은 두 단계로 정의됩니다.

먼저 모델의 매개변수를 지정한 다음 입력에 적용되는 방법을 간략하게 설명합니다. 학습 가능한 매개 변수(ReLU, maxpool와 같은 작업)를 포함하지 않는 작업의 경우 일반적으로 torch.nn.functional 모듈을 사용합니다. 여기에 여기에서 빌린 단일 숨겨진 계층 신경망의 예입니다: 이것은 우리 자신의 손실 함수를 작성하는 매우 간단한 예입니다. NLP의 섹션에서사용자 지정 손실 함수의 흥미로운 사용을 살펴보겠습니다. GPU 장치에 모델을 보낼 수도 있습니다. 예를 들어 nn으로 만든 간단한 모듈을 고려하십시오. 순차적: 이 예제에서는 nn 패키지를 사용하여 2계층 네트워크를 구현합니다. 우리 자신의 코드에서 우리는 단지 아주 기본적인 아이디어를 설명하기 위해 가장 간단한 접근 방식을 취합니다. PyTorch에서 여러 가지 방법을 사용할 수 있으며 그 중 하나는 SGD입니다. 그들의 접근 방식은 우리의 간단한 접근 방식보다 더 정교하며, 예를 들어 체중 변화 방향에서 “모멘텀”이라는 개념을 포함합니다.