작성
·
200
0
1. BucketIterator 함수가 배치사이즈별로 train, label을 분리해준다고 이해했는데 그 결과가 train_iter에 text[0],[1] 두개의 인덱스가 맞나요?
2.permute 는 각 차원의 위치를 바꿔는 역할을 하는데 permute(1, 0, 2) 0 ,1 ,2 가 각각 어던 차원을 의미하나요?
3.embedding_length = 300으로 주셨는데 입력값은 마음대로 조정할 수 있는건가요?\
4.Attention모델에서 인코더 마지막 히든스테이트 값이 디코더 시작부분으로 초기화 된다고 하셨는데 (제가 잘 이해한건지 모르겠네요) attn_weights = torch.bmm(lstm_output, hidden.unsqueeze(2)).squeeze(2) 에서 final_state는 디코더 첫번째 히든스테이트인가요? 상위 코드는 어텐션 스코어를 구해주는 코드인가요?
답변이 안될까요~
답변 1
0
안녕하세요, Justin 입니다.
늦게 답변드려 죄송합니다.
1. train, label이 아닌, text, label로 분리합니다. 같은 실습 코드 내 train_model 함수를 참고해보시면, batch.text[0], batch.label 값 각각이 X, y 에 해당됩니다.
2. permute는 벡터의 차원 순서를 재배치합니다.
예를 들어, permute(1, 0, 2)의 경우, 기존 벡터 차원이 [32, 16, 100] 에 적용하였을 때,
[16, 32, 100] 으로 변경됩니다.
>>> x = torch.randn(2, 3, 5) >>> x.size() torch.Size([2, 3, 5]) >>> torch.permute(x, (2, 0, 1)).size() torch.Size([5, 2, 3])
3. 네, 임베딩 벡터의 크기는 분석가 마음대로 조정할 수 있습니다.
4. final_state 값은 인코더의 히든스테이트 값 중 마지막 위치에 해당되는 벡터이므로, 이를 이용하여 디코더의 히든스테이트 값 중 첫 번째 위치로 지정합니다.
감사합니다.