강의

멘토링

커뮤니티

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

SUNSET님의 프로필 이미지
SUNSET

작성한 질문수

ELMO/ Lambda 오류

작성

·

660

0

def ELMoEmbedding(x):
    return elmo(tf.squeeze(tf.cast(x, tf.string)), as_dict=True, signature="default")["default"]

from keras.models import Model
from keras.layers import Dense, Lambda, Input

input_text = Input(shape=(1,), dtype=tf.string)
embedding_layer = Lambda(ELMoEmbedding, output_shape=(1024, ))(input_text)
hidden_layer = Dense(256, activation='relu')(embedding_layer)
output_layer = Dense(1, activation='sigmoid')(hidden_layer)
model = Model(inputs=[input_text], outputs=output_layer)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

이렇게 코드를 돌렸는데

TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_40948\3192022207.py in <module>
      3 
      4 input_layer = Input(shape=(1,), dtype=tf.string)
----> 5 embedding_layer = Lambda(ELMoEmbedding, output_shape=(1024,))(input_layer)
      6 hidden_layer = Dense(256, activation='relu')(embedding_layer)
      7 output_layer = Dense(1, activation='softmax')(hidden_layer)

~\anaconda3\lib\site-packages\keras\utils\traceback_utils.py in error_handler(*args, **kwargs)
     68             # To get the full stack trace, call:
     69             # `tf.debugging.disable_traceback_filtering()`
---> 70             raise e.with_traceback(filtered_tb) from None
     71         finally:
     72             del filtered_tb

~\AppData\Local\Temp\ipykernel_40948\1728784153.py in ELMoEmbedding(x)
      1 # 데이터의 이동이 케라스 → 텐서플로우 → 케라스가 되도록 하는 함수
      2 def ELMoEmbedding(x):
----> 3     return elmo(tf.squeeze(tf.cast(x, tf.string)), as_dict=True, signature="default")["default"]
      4 # tf.squeeze : 크기 1인 차원 제거 / tf.cast : 소수점에서 정수형으로 / tf.string: ? 문자열 ? / as_dict : 컬럼명으로 불러오기

TypeError: Exception encountered when calling layer "lambda_9" (type Lambda).

pruned(text) got unexpected keyword arguments: as_dict, signature.

Call arguments received by layer "lambda_9" (type Lambda):
  • inputs=tf.Tensor(shape=(None, 1), dtype=string)
  • mask=None
  • training=None

이렇게 오류가 계속 나네요

어떤 부분이 잘못된걸까요 ..!

답변 1

0

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

에러 메시지를 보면, lambda_9 레이어에서 pruned(text) 함수가 “as_dict”와 “signature” 키워드 인자를 받을 수 없다는 것 같습니다. 이는 가능하다면 이전에 사용되던 버전과 현재 사용되는 버전의 차이로 인해 발생할 수 있는 문제입니다. 가장 간단한 해결책은 “as_dict”와 “signature” 인자를 람다 함수에서 지우는 것입니다.

def ELMoEmbedding(x):
embeddings = elmo(tf.squeeze(tf.cast(x, tf.string)), training=False)
return embeddings[‘elmo’] # 수정된 부분

이런 방식으로 elmo 레이어에 통과시키는 데이터를 작성하면 잘 작동할 것입니다.

감사합니다.

SUNSET님의 프로필 이미지
SUNSET

작성한 질문수

질문하기