작성
·
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
안녕하세요~. 반갑습니다.
먼저 수강에 불편을 드려서 죄송합니다.
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_sequences
와 return_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_sequences
와 return_state
매개변수를 잘 확인하시고, 해당하는 부분의 코드를 적절히 조정해야 합니다.
또한, 해당 GRU Layer를 사용할 때, initial_state
매개변수를 올바르게 설정했는지 확인해보세요. initial_state=hidden
처럼 설정하는 부분은 본래의 의도와 부합하는 것으로 보이지만, 반환되어야 하는 값의 수에 대한 오류인 만큼 GRU Layer의 정의 부분과 호출 부분에서 반환 값에 대한 기대를 명확히 해야 할 것 같습니다.
이 부분을 확인하고 수정해보시길 바랍니다. 추가 궁금증이 있으시면 더 질문해주세요.