파이썬 rnn 예제

이 코드 예제에서는 멋진 캡슐화와 더 나은 코드를 갖기 위해 Python 클래스에서 모델을 빌드하겠습니다. 첫 번째 클래스는 입력 데이터를 포함하는 간단한 클래스입니다. “한 소녀가 술집에 들어갔는데,`술을 마실 수 있을까?` 하고 물었습니다. 바텐더는 `확실히 {}”라고 말했다. 예를 들어 위의 문자열에서 {} 기호를 채울 수 있는 옵션(예: “miss”, “ma`am” 등)에 대한 많은 옵션이 있습니다. 그러나 다른 단어는 “선생님”, “미스터”등과 같은 에도 맞을 수 있습니다. 명사에 대한 올바른 성별을 얻기 위해 신경망은 가능성이 있는 성별(예: “소녀”와 “그녀”)을 지정하는 두 개의 이전 단어가 사용되었다는 것을 “기억”해야 합니다. 반복 신경망에서 시간(또는 시퀀스)을 통한 이러한 유형의 정보 흐름은 아래 다이어그램에 표시되어 시퀀스를 해제합니다. 그렇다면 왜 처음부터 코딩해야 합니까? 나는 단단히 배우고 진정으로 개념을 배어 하는 가장 좋은 방법은 처음부터 그것을 배울 수 있다고 생각합니다. 그리고 이 튜토리얼에서 선보일 것입니다. 우리는 우리가 필요로하는 수입과 우리의 기본 RNN 예를 시작합니다 : 연구원은이 불안정한 환경에서 그라데이션 기반 교육을 할 수있는 여러 가지 방법을 발견했다. 몇 가지 예는 다음과 같습니다 그라데이션 클리핑, 헤시안무료 최적화, 모멘텀 등 단어 수는 매개 변수로 남아 있습니다. 여기에 표시된 예제에 50을 사용하므로 네트워크에 50개의 단어를 제공하고 51번째 를 예측하도록 교육합니다.

네트워크를 교육하는 다른 방법은 시퀀스의 각 지점에서 다음 단어를 예측하도록 하는 것입니다. 여기서 사용되는 구현이 반드시 최적(허용되는 최상의 솔루션은 없지만 잘 작동)은 아닙니다! 텍스트는 시퀀스 데이터의 또 다른 좋은 예입니다. 주어진 텍스트 다음에 어떤 단어나 구가 오는지 예측할 수 있다는 것은 매우 유용한 자산이 될 수 있습니다. 우리는 우리의 모델이 셰익스피어 소네트를 작성하기를 원합니다! 아래에 설명될 예제 코드에서는 텍스트 예측을 수행할 예정입니다. Word2Vec 알고리즘의 이전 자습서에서 설명한 것처럼 단어는 의미 있는 단어 벡터를 사용하여 신경망에 입력됩니다. 이 벡터는 단어의 의미의 일부 측면을 캡처하는 방식으로 인코딩됩니다 (의미는 일반적으로 단어가 일반적으로 발견되는 컨텍스트로 해석됩니다). 따라서 아래의 LSTM 네트워크에 입력된 각 단어는 650 길이 벡터가 됩니다. 다음으로, 언롤링된 LSTM 네트워크에 단어 시퀀스를 입력하기 때문에 각 입력 행에 대해 이러한 단어 벡터 중 35개에 대해 입력합니다. 따라서 각 행의 입력은 크기(35 x 650)가 됩니다.

마지막으로 TensorFlow를 사용하면 다차원 텐서를 통해 데이터 일괄 처리를 처리할 수 있습니다(기본 TensorFlow에 대해 자세히 알아보려면 이 TensorFlow 자습서를 참조하십시오). 일괄 처리 크기가 20인 경우 학습 입력 데이터(20 x 35 x 650)가 됩니다. 나중에 참조하기 위해 텐서 크기를 제시 한 방법 (예 : (20 x 35 x 650))을 배치 크기가 텐서의 첫 번째 차원인 “배치 메이저”배열이라고합니다. 우리는 또한 “시간 주요”형식으로 데이터를 정렬 할 수 있습니다, 이는 될 것 (35 x 20 x 650) – 동일한 데이터, 그냥 다른 배열. 알고리즘이 이를 복제할 수 있습니까? 가장 먼저 떠오르는 기술은 신경망(NN)입니다. 그러나 전통적인 NN은 불행히도이 작업을 수행 할 수 없습니다. 동영상에서 다음에 올 내용을 예측하고자 하는 예를 들어 보겠습니다. 기존의 신경망은 정확한 결과를 생성하는 데 어려움을 겪을 것입니다. 줄 42: 우리는 100,000 개 이상의 교육 예제를 반복하고 모델의 핵심은 한 번에 한 단어를 처리하고 문장의 다음 단어에 대한 가능한 값의 확률을 계산하는 LSTM 셀로 구성됩니다.