inflearn logo
강의

講義

知識共有

例として学ぶディープラーニング自然言語処理入門 NLP with TensorFlow - RNNからBERTまで

実習 1 - TensorflowとTransformerモデルを使ってポルトガル語-英語翻訳を行ってみる

transformer 기계번역 강의 오류 질문

155

alex991183737

投稿した質問数 1

0

class Encoder(tf.keras.layers.Layer):
  def __init__(self, num_layers, d_model, num_heads, dff, input_vocab_size,
               maximum_position_encoding, rate=0.1):
    super(Encoder, self).__init__()

    self.d_model = d_model
    self.num_layers = num_layers

    self.embedding = tf.keras.layers.Embedding(input_vocab_size, d_model)
    self.pos_encoding = positional_encoding(maximum_position_encoding,
                                            self.d_model)

    self.enc_layers = [EncoderLayer(d_model, num_heads, dff, rate)
                       for _ in range(num_layers)]

    self.dropout = tf.keras.layers.Dropout(rate)

  def call(self, x,  training, mask):

    seq_len = tf.shape(x)[1]

    # adding embedding and position encoding.
    x = self.embedding(x)  # (batch_size, input_seq_len, d_model)
    x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32))
    x += self.pos_encoding[:, :seq_len, :]

    x = self.dropout(x, training=training)

    for i in range(self.num_layers):
      x = self.enc_layers[i](x, training, mask)

    return x  # (batch_size, input_seq_len, d_model)

위와 같이 클래스 인코더가 정의 되어있고
아래와 같이 테스트를 진행했습니다
오류가 발생하여 [training=False, mask=None] 으로 수정하여 진행을 해도 같은 오류가 발생합니다.

sample_encoder = Encoder(num_layers=2, d_model=512, num_heads=8,
                         dff=2048, input_vocab_size=8500,
                         maximum_position_encoding=10000)
temp_input = tf.random.uniform((64, 62), dtype=tf.int64, minval=0, maxval=200)

sample_encoder_output = sample_encoder(temp_input, training=False, mask=None)

print(sample_encoder_output.shape)  # (batch_size, input_seq_len, d_model)

 

오류내용

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

Only input tensors may be passed as positional arguments. The following argument value should be passed as a keyword argument: False (of type <class 'bool'>)

Arguments received by Encoder.call():
  • x=tf.Tensor(shape=(64, 62), dtype=int64)
  • training=False
  • mask=None


문제가 무엇일까요 ㅜㅠ

 

딥러닝 tensorflow NLP

回答 2

0

AISchool

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

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

강의 영상 촬영시점 이후에 많은 시간이 흘러서 tensorflow 버전과 관련된 충돌이 발생하는 것 같습니다.

tensorflow 버전을 정리한 아래 colab 파일로 실습 진행 부탁드립니다. (맨위에 셀에서 pip install 실행후 입력창이 뜨면 y 라고 입력하고 엔터를 누르시면 됩니다.)

 

https://colab.research.google.com/drive/18nxotMTc2Qqc2_tARhcvmz8laFOzYfWm?usp=sharing

 

좋은 하루 되세요.

감사합니다.

0

communityai8509

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

최호준님께서 질문하신 내용을 보면 Encoder.call() 메서드를 호출할 때 발생한 오류가 있습니다. 이 오류는 입력 인자로 넘겨주는 방식에 문제가 있을 때 발생할 수 있습니다. TensorFlow 2.0부터는 call() 메서드를 사용할 때 positional arguments 대신 keyword arguments로 특정 타입의 인자들을 넘겨야 하는 제한이 있습니다.

오류 메시지에 나온 내용처럼, training 인자를 keyword argument 형식으로 넘겨줘야 합니다. sample_encoder.call() 메서드를 호출할 때 해당 인자를 올바르게 전달할 수 있도록 다음 예제처럼 코드를 수정해 보세요:

sample_encoder_output = sample_encoder(temp_input, training=False, mask=None)

기존에 이미 이와 같이 전달하고 있었을 가능성이 있지만, TensorFlow는 때때로 특정 환경 설정이나 버전 차이로 인해 예기치 않게 keyword argument 처리에서 문제가 발생할 수 있습니다. 이를 우회하기 위해 call() 메서드 내에서는 강제로 keyword argument를 이용하여 인자를 전달하는 것이 권장됩니다. 이렇게 하면 TensorFlow가 인자들을 올바르게 인식하게 됩니다.

다만, 이 정도의 코드 상에서는 버전 차이로 발생할 수 있는 문제도 감안해 보셔야 하므로, TensorFlow 버전과 관련한 변경 사항도 함께 확인해보시는 것이 좋습니다.

참고로, 이전에 발생했던 비슷한 문제 해결에 대한 추가 정보를 제공하기 위해 강의 관련 TensorFlow의 positional argument 사용에 대한 가이드라인 을 확인해 주시면 다른 도움이 될 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

import torch가 안되는 경우는 어떻게 하나요?

0

16

1

소리가 겹쳐서 들려요

0

21

2

가중치에 대한 질문

0

107

1

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

0

254

2

실습 2 - Char-RNN 코드 학습 부분에서 오류가 발생합니다.

0

277

2

pad_both_ends 사용할 때 n은 왜 사용하나요?

1

206

2

트레이닝 에러 발생

0

335

2

트랜스포머 인코더 레이어 테스트 에러

0

219

1

9강 BERT 실습 예제 코드

0

465

1

Bert 관련 문의

0

336

2

코랩에서 실행이 안됩니다

0

1126

1

bert를 이용해서 ocr 시스템을 만들려면 어떻게 해야 할까요 ?

0

787

1

소스코드 실행 시 에러

0

565

2

N-gram_example

1

808

1

BERT를 이용한 텍스트 분류에서 다중분류라면 어떻게 해야할까요?

1

1524

1

개인 깃허브 소스코드 업로드 가능할까요?

0

331

1

#@title Choose a BERT model to fine-tune

0

370

1

nltk모듈 MLE의 score메서드 계산 질문드립니다.

0

202

0

bert 파인튜닝 코드 질문

0

397

0

네이버 영화리뷰 파인튜닝 질문드려요

0

306

1

코드 실행 오류

0

316

1

bert를 이용한 텍스트 분류 imdb 편 질문드립니다.

0

355

1

안녕하세요. 강의 잘듣고있습니다!

0

278

1

강의 자료는 어디있나요(자연어 처리)

0

333

1