01 긴 데이터를 학습하는 방법
긴 글 전체를 한 번에 처리하기 어렵다면, 일부 구간씩 읽고 다음 문자를 예측하는 연습을 어떻게 구성할 수 있을까요?
설명
- 연속된 Window를 Input으로 사용
- 각 위치의 다음 문자를 Target으로 지정. 예: abcd → bcde
긴 글 전체를 한 번에 처리하기 어렵다면, 일부 구간씩 읽고 다음 문자를 예측하는 연습을 어떻게 구성할 수 있을까요?
문장 앞부분의 정보가 한참 뒤의 예측에 필요할 수 있습니다. 이전 정보를 계속 바꾸기만 한다면 어떤 문제가 생길까요?
hello!를 길이 3·Stride 2로 자른 두 Input·Target 쌍을 출력하세요. 각 쌍의 Input과 Target을 위아래 두 행으로 놓고 같은 열에서 한 글자 차이가 나는지 대조하세요.X.shape와 Y.shape의 각 축에 Window 수 , 길이 , 문자 표현 크기 를 대응시키세요.output·h_n·c_n의 shape를 표로 적으세요. 반환하지 않는 State는 ‘없음’으로 표시하세요.output의 Sequence 축과 h_n의 마지막 시점 표현을 구분해 설명하고, LSTM이 추가로 반환하는 c_n의 역할을 적으세요.코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.
파일명: 이름_학번_13주차.ipynb.
실행 환경을 다시 시작하고 전체 코드를 위에서부터 실행한 뒤 저장하세요.
문자별 Logits와 Target을 펼치는 축이 맞지 않는 경우
with torch.no_grad():
debug_logits = results['LSTM'][0](X)
debug_flat_logits = debug_logits.reshape(-1, debug_logits.shape[-1])
print("Logits:", debug_logits.shape, "flattened:", debug_flat_logits.shape)
for debug_target in [Y, Y.reshape(-1)]:
print("Target:", debug_target.shape)
try:
print("Loss:", F.cross_entropy(debug_flat_logits, debug_target).item())
except (RuntimeError, ValueError) as error:
print(type(error).__name__, str(error))