인프런 커뮤니티 질문&답변
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 레이어에 통과시키는 데이터를 작성하면 잘 작동할 것입니다.
감사합니다.




