pytorch는 여러 복잡한 로직들이 담긴 레이어를 하나의 함수로 축약한다.
<텐초의 파이토치 딥러닝 특강>을 따라가며 공부하던 중 RNN 레이어를 한 줄로 해결하는 것을 보고 충격을 받았다. 그 기전을 이해하기 힘들었는데 그것을 한줄로 구현할 수 있기 때문이다.
RNN 레이어들을 나타낸 코드를 그림으로 한번 그려보았다.
배치 크기가 32이고 입력벡터가 3차원짜리 벡터가 30시점만큼 있는 형태이다. ->shape=[32, 30,3]
=> RNN 레이어 5개가 있고 입력 시점이 30이므로 하나의 레이어 속에 시점 30개가 존재한다.(동그라미 30개)
=>각 시점에서는 이전 시점에서 출력된 8차원 은닉상태(hidden state)와 그 시점에 입력된 3차원 입력상태가 연산되어 은닉상태가 출력되고 그 다음 시점의 연산에 포함된다. 이 과정이 30번 반복되고, 또 레이어가 5개이므로 이것이 또 5번 반복된다.
(위 그림에서 틀린 게 있는데, 첫번째 시점에 h1이 만들어질 때 i1과 함께 초기 은닉상태 h0도 같이 연산된다!)
=>이 rnn 코드가 실행되려면
이 코드가 한줄 실행되어야 한다. x는 입력값, h0은 초기 은닉상태이며 x는 마지막 5번째 층의 모든 은닉상태, hn은 모든 층의 모든 은닉상태를 합친 것이다. x에는 8차원 은닉상태가 30시점만큼 존재하므로 x의 차원은 [32,30,8]이다.
->이후 x=torch.reshape(x,(x.shape[0],-1)) 해서 [32,30*8]로 차원을 바꾼다.(평탄화) 이후 fc 레이어에 통과시켜 최종 값 하나를 얻도록 한다.
'딥러닝' 카테고리의 다른 글
[Easy! 딥러닝] Chapter 6. 배치 정규화와 레이어 정규화의 의미와 필요성 (0) | 2025.05.16 |
---|---|
[Easy! 딥러닝] Chapter6 앞부분까지 새롭게 배운 내용 (0) | 2025.05.15 |
[DL Study] 4. Cost gradient descent (0) | 2025.04.29 |
[DL Study] 3. DNN forward pass (0) | 2025.04.08 |
[DL Study] 2. Perceptron, MLP (0) | 2025.04.05 |