작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
448
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)