인프런 커뮤니티 질문&답변

코옹자님의 프로필 이미지
코옹자

작성한 질문수

예제로 배우는 딥러닝 자연어 처리 입문 NLP with TensorFlow - RNN부터 BERT까지

실습 1 - TensorFlow와 Seq2Seq 모델을 이용해서 포르투칼어-영어 번역 수행해보기

seq2seq를_이용한_NMT.ipynb 실습코드 에러 문의사항입니다.

작성

·

82

0

실습 1 - TensorFlow와 Seq2Seq 모델을 이용해서 포르투칼어-영어 번역 수행해보기

실습코드 내 GRU를 이용한 Encoder 부분에서 아래와 같이 error가 납니다.

encoder = Encoder(vocab_inp_size, embedding_dim, units, BATCH_SIZE)

# 샘플 입력
sample_hidden = encoder.initialize_hidden_state()
sample_output, sample_hidden = encoder(example_input_batch, sample_hidden)
print ('Encoder output shape: (batch size, sequence length, units) {}'.format(sample_output.shape))
print ('Encoder Hidden state shape: (batch size, units) {}'.format(sample_hidden.shape))

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-71-879487bff06b> in <cell line: 5>()
      3 # 샘플 입력
      4 sample_hidden = encoder.initialize_hidden_state()
----> 5 sample_output, sample_hidden = encoder(example_input_batch, sample_hidden)
      6 print ('Encoder output shape: (batch size, sequence length, units) {}'.format(sample_output.shape))
      7 print ('Encoder Hidden state shape: (batch size, units) {}'.format(sample_hidden.shape))

1 frames
<ipython-input-69-76383a24b17a> in call(self, x, hidden)
     12   def call(self, x, hidden):
     13     x = self.embedding(x)
---> 14     output, state = self.gru(x, initial_state = hidden)
     15     return output, state
     16 

ValueError: Exception encountered when calling Encoder.call().

too many values to unpack (expected 2)

Arguments received by Encoder.call():
  • x=tf.Tensor(shape=(64, 16), dtype=int32)
  • hidden=tf.Tensor(shape=(64, 1024), dtype=float32)

self.gru(x, initia_state=hidden)부분에서 출력 결과가 두 개가 아닌 65개가 출력되어서 output, state 두 개로 할당하면 안되는 것 같습니다!

 

 

답변 2

0

AISchool님의 프로필 이미지
AISchool
지식공유자

안녕하세요~. 반갑습니다.

먼저 수강에 불편을 드려서 죄송합니다.

tensorflow 버전을 정리한 아래 colab으로 실습 진행을 부탁드립니다.

 

https://colab.research.google.com/drive/1W-XufD5iis6CM5igyws4Xmb5jTgXIAKI?usp=sharing

좋은 하루되세요.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

님의 질문을 보니 TensorFlow와 Seq2Seq 모델을 이용한 포르투칼어-영어 번역 실습에서 encoder 부분에 오류가 발생하는 것 같네요.

실습 코드 내에서 self.gru(x, initial_state=hidden) 호출 시 예상했던 것과 다르게 출력 결과가 두 개가 아니라 여러 개로 반환되어 발생하는 오류 같습니다. GRU layer에서 return_sequencesreturn_state의 설정에 따라 반환 값이 달라질 수 있습니다. 기본적으로 return_state=False, return_sequences=False 상태로, 이 두 매개변수 설정에 따라 GRU 층의 출력 형태가 달라지므로 GRU 층을 정의하는 부분의 코드를 다시 확인해주세요.

일반적으로, return_sequences=True는 각 시퀀스에 대한 출력을 반환하고, return_state=True는 마지막 상태를 반환합니다. 즉, return_sequences, return_state 둘 다 True로 설정할 경우 출력 결과로 (output, state)를 기대할 수 있습니다.

self.gru 호출 부분에서 기대했던 출력 결과의 수와 실제 출력 결과의 수가 불일치하여 발생하는 이 오류를 해결하기 위해서는 GRU Layer를 정의할 때 return_sequencesreturn_state 매개변수를 잘 확인하시고, 해당하는 부분의 코드를 적절히 조정해야 합니다.

또한, 해당 GRU Layer를 사용할 때, initial_state 매개변수를 올바르게 설정했는지 확인해보세요. initial_state=hidden처럼 설정하는 부분은 본래의 의도와 부합하는 것으로 보이지만, 반환되어야 하는 값의 수에 대한 오류인 만큼 GRU Layer의 정의 부분과 호출 부분에서 반환 값에 대한 기대를 명확히 해야 할 것 같습니다.

이 부분을 확인하고 수정해보시길 바랍니다. 추가 궁금증이 있으시면 더 질문해주세요.

코옹자님의 프로필 이미지
코옹자

작성한 질문수

질문하기