-
keras.Layers.Layer의 call()과 __call__()라이브러리 문서 2022. 1. 7. 21:45
- keras.Layers.Layer의 call()과 __call__()은 거의 유사하게 동작한다.
- keras.Layers.Layer를 callable 객체로 만들면 __call__()을 내부적으로 호출한다.
- __call__()은 부모 Layer에 감춰져 있기에 작성해줄 필요가 없으며,
__call__()의 역할은 build()를 호출한 뒤에 call()을 호출하는 것이다.
- Custom layer에 call()을 사용하지 않고 __call__()을 바로 적용할수도 있다.
- 하지만 그렇게 하기 위해서는 build()에서 사용된 weight와 bias의 초기화를 한 뒤에 matrix연산을 적용하고,
tensor로 변환하는 로직을 만들어 줘야 한다.
class CustomDense(tf.keras.layers.layer): # CustomeDense 객체 생성시 입력되는 초기화 parameter 처리 def __init__(self, units=32): super(CustomDense, self).__init__() self.units = units def __call__(self, inputs): self.w = self.add_weight(shape=(inputs.shape[-1],self.units), initializer='random_normal', trainable=True,) self.b = self.add_weight(shape=(self.units,), initializer='random_normal', trainable=True) return tf.matmul(inputs, self.w) + self.b # input 값을 4개의 원소를 가지는 1차원으로 생성. inputs = Input((4,)) # 10개의 unit을 가지는 CustomDense 객체를 생성 후 callable로 inputs값을 입력 outputs = CustomDense(10)(inputs) # inputs와 outputs로 model 생성 model = Model(inputs, outputs) model.summary()
'라이브러리 문서' 카테고리의 다른 글
[혼공머신] 머신러닝 딥러닝의 핵심 패키지와 함수 (0) 2022.04.25 파이참 : 프로젝트 인터프리터 설정 (0) 2022.01.12 keras.preprocessing.text.Tokenizer (0) 2021.12.26 gensim 라이브러리 (0) 2021.12.26 Word2Vec 모델 학습(gensim) (0) 2021.12.22