• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

out = out[:, -1] 코드에 관한 질문입니다

23.03.09 21:48 작성 조회수 385

0

강의 8:30 부분에서 나오는

out = out[:, -1] 코드에 관한 질문입니다.

 

우선, 다음과 같이 예시를 작성해 보았습니다

이렇게 test_data를 만들고,

 

여기에 test_data[:, -1] 을 적용해 보았는데요,

shape이 (3, 2, 4) 에서 (3, 4) 로 바뀌는 것은 확인하였지만,

이 코드가 '왜 사용되었는지' 에 관한 궁금증이 생겼습니다.

 

단지 shape을 맞춰주기 위해서 전체 데이터 중 일부를 slicing 하는 것이라면,

view 메소드를 사용해서 shape을 맞춰주는 방법도 있을텐데요,

전체 데이터 중에서 일부를 slicing 하는 방식으로 이렇게 코드를 작성한 이유가 무엇인지 궁금합니다!

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변 도우미입니다.

말씀하신 부분은 혹시나 궁금해하시는 분들이 계실 것 같아서, 다음과 같이 해당 코드에 상세하게 설명을 드렸습니다.

다음 주석에서 특히 말씀하신 부분과 관련된 부분은

out[:, -1] 은 (batch_size, sequence_length, 2 * hidden_size) 에서,

전체 batch_size 를 선택한다는 의미가 :,

sequence_length 인 28개의 순서가 있고, 각 순서마다 2 * hidden_size 만큼 있음

이중에 최종 값은 맨 마지막 sequence_length 의 2 * hidden_size 임

|out| = (batch_size, hidden_size * 2)

위 부분인데요. 사실 상세하게 설명을 기재해서, 여기에 추가할 부분이 없더라고요. 기재해주신 부분도 마찬가지이고, 마지막 self.layers(out) 의 형태에 맞추, 결과적으로 맨 마지막의 데이터가 최종 결과이기 때문에, 위와 같이 변경하였다고 이해해주시면 좋을 것 같습니다.

감사합니다.

~~~~~~~~~~~~~~

def forward(self, x):

# |x| = batch_first=True 이므로 (batch_size, sequence_length, input_size)

out, = self.sequenceclassifier(x) # output, hn 이므로, h_n 은 사용안함

# output, h_n 이므로, h_n 은 사용안함

# |out| = batch_first=True 이므로 (batch_size, sequence_length, 2 * hidden_size)

# bidirectional 이 True 이면, bidirections 는 2 * hidden_size

out = out[:, -1]

# out[:, -1] 은 (batch_size, sequence_length, 2 * hidden_size) 에서,

# 전체 batch_size 를 선택한다는 의미가 :,

# sequence_length 인 28개의 순서가 있고, 각 순서마다 2 * hidden_size 만큼 있음

# 이중에 최종 값은 맨 마지막 sequence_length 의 2 * hidden_size 임

# |out| = (batch_size, hidden_size * 2)