github (link) 에서 LSTM 언어 모델의이 예제를 살펴 보았습니다 . 일반적으로하는 일은 나에게 매우 분명합니다. 그러나 나는 여전히 contiguous()
코드에서 여러 번 발생 하는 호출 이 무엇을하는지 이해하는 데 어려움을 겪고 있습니다.
예를 들어 74/75 행의 코드 입력 및 LSTM의 대상 시퀀스가 생성됩니다. 데이터 (에 저장 됨 ids
)는 2 차원이며 첫 번째 차원은 배치 크기입니다.
for i in range(0, ids.size(1) - seq_length, seq_length):
# Get batch inputs and targets
inputs = Variable(ids[:, i:i+seq_length])
targets = Variable(ids[:, (i+1):(i+1)+seq_length].contiguous())
그래서 간단한 예로서, 배치 크기 1 사용할 때 seq_length
10 inputs
와 targets
같은 모습을 :
inputs Variable containing:
0 1 2 3 4 5 6 7 8 9
[torch.LongTensor of size 1x10]
targets Variable containing:
1 2 3 4 5 6 7 8 9 10
[torch.LongTensor of size 1x10]
그래서 일반적으로 내 질문은 무엇 contiguous()
이며 왜 필요합니까?
또한 두 변수가 동일한 데이터로 구성되어 있기 때문에 메서드가 대상 시퀀스에 대해 호출되는 이유를 이해하지 못하지만 입력 시퀀스는 아닙니다.
어떻게 수있는 targets
비 연속하고 inputs
여전히 인접?
편집 :
나는 전화를 생략하려고했지만 contiguous()
손실을 계산할 때 오류 메시지가 나타납니다.
RuntimeError: invalid argument 1: input is not contiguous at .../src/torch/lib/TH/generic/THTensor.c:231
그래서 분명히이 contiguous()
예제에서 호출 이 필요합니다.
(이를 읽기 쉽게 유지하기 위해 여기에 전체 코드를 게시하는 것을 피했습니다. 위의 GitHub 링크를 사용하여 찾을 수 있습니다.)
미리 감사드립니다!
tldr; to the point summary
요점 요약을 간결하게 작성하는 것이 좋습니다 .