pytorch rnn 예제

당신은 궁금해 할 수 있습니다, RNN의 어느 부분에서 내 출력을 추출합니까? 이것은 실제로 사용 사례가 무엇인지에 달려 있습니다. 예를 들어 분류 작업에 RNN을 사용하는 경우 클래스 확률 점수를 나타내는 벡터인 모든 입력을 전달한 후 하나의 최종 출력만 있으면 됩니다. 다른 경우에는 이전 문자/단어를 기반으로 텍스트 생성을 수행하는 경우 매 시간 마다 출력이 필요합니다. 첫째, 우리는 pytorch, 우리가 사용할 딥 러닝 라이브러리 및 파이썬 배열을 조작하는 데 도움이되는 numpy를 가져옵니다. 또한 ReLu 및 sigmoid와 같은 비선형 함수를 포함하는 nn(pytorch의 신경망 라이브러리) 및 torch.nn.functional를 가져옵니다. RNN의 예는 영화 리뷰가 양수인지 부정적인지를 예측하는 것입니다. x 값은 텍스트 문자열이되며 각 y 값은 지금까지의 시퀀스가 양수 또는 음수인지 나타냅니다. 마지막 y 값이 전체 문자열이 양수 또는 음수 검토인지 올바르게 식별되기를 바랍니다. 이 인코딩 형식은 기본적으로 텍스트의 각 문자를 고유한 벡터로 제공합니다. 예를 들어, 텍스트에 “GOOD”이라는 단어만 포함되어 있는 경우 고유 문자가 3개뿐이므로 어휘 크기는 3개에 불과합니다. 각 고유 문자를 고유한 벡터로 할당하며, 여기서 해당 문자에 할당된 인덱스에서 하나를 제외한 모든 항목이 0입니다. 각 문자를 모델에 표현하는 방법입니다.

반복 신경망은 일종의 상태를 유지하는 네트워크입니다. 예를 들어, 네트워크가 시퀀스를 통과할 때 정보가 프로포지싱될 수 있도록 출력을 다음 입력의 일부로 사용할 수 있습니다. LSTM의 경우 시퀀스의 각 요소에 대해 해당 숨겨진 상태 (h_t)가 있으며, 이 상태는 원칙적으로 시퀀스의 앞부분의 임의의 지점에서 얻은 정보를 포함할 수 있습니다. 숨겨진 상태를 사용하여 언어 모델, 음성 태그 및 무수한 다른 것들의 단어를 예측할 수 있습니다. 선형 레이어를 구현하려면… 당신은 그것을 짐작! 우리는 torch.nn.Linear의 인스턴스를 만듭니다. 이번에는 문서에서 필요한 매개 변수를 in_features: 각 입력 샘플의 크기 및 out_features: 각 출력 샘플의 크기로 나열합니다. 이렇게 하면 입력 텐서의 마지막 치수만 변환됩니다. 예를 들어, 크기(d1, d2, d3, …, dn, in_features)의 입력 텐서를 전달하는 경우 출력 텐서의 크기는 마지막 차원을 제외한 모든 것에 대해 동일한 크기를 가지며, 크기의 텐서(d1, d2, d3, …, dn, out_피처)가 됩니다. LSTM이 seq_len x 배치 x hidden_dim의 출력 텐서 O를 생성한다고 가정해 보겠습니다. 한 번에 하나의 예제에서만 피드되므로 일괄 처리는 항상 1입니다. 이것은 본질적으로 우리에게 크기 seq_len x hidden_dim의 출력 텐서 O를 제공합니다.

이제 이 출력 텐서에 다른 텐서 W 크기의 hidden_dim x embedding_dim을 곱하면 결과 텐서 R=O×W의 크기가 seq_len x embedding_dim입니다. 이것이 우리가 원했던 것과 정확히 다른가요? 위의 예제 쌍(`ERPDRF`, `SECRET`)에서 LSTM의 출력을 살펴보면 차원이 맞지 않음을 즉시 확인할 수 있습니다. 출력 치수는 6 x 1 x 10이며, 이는 모든 문자에 대해 출력이 예상 27이 아닌 D(10) 차원 텐서임을 의미합니다. … 다이빙하기 전에 몇 가지를 아는 것이 중요합니다. PyTorch는 LSTM, CNN 및 GR과 같은 계층에서 SGD, Adam 및 와 같은 최적화 프로그램에 대해 일반적으로 사용되는 대부분의 엔터티에 대한 구현을 제공합니다(처음에 PyTorch를 사용하는 것이 전부는 아닌가요?!). 이러한 엔터티를 사용하는 일반적인 패러다임은 먼저 몇 가지 필수 매개 변수를 사용하여 torch.nn.entity의 인스턴스를 만드는 것입니다. 예를 들어 lstm을 인스턴스화하는 방법은 다음과 같습니다.