클래스 메서드 call을 __call__로 하면 왜 오류가 날까요?
991
작성한 질문수 20
파이썬 클래스의 'call' 메서드를 정의할때
' __call__'을 사용하는 것으로 알고 있는데,
def __call__:
--code--
캐글 강의코드에서 __call__로 바꾸면 오류가 안나고
call을 하면 정상작동하는데 왜 이런건지 이런지 궁금합니다.
답변 1
1
안녕하십니까
1. 캐글 강의코드에서 __call__로 바꾸면 오류가 안나고
call을 하면 정상작동하는데 왜 이런건지 이런지 궁금합니다.
=> keras Layer의 call()과 __call__()은 거의 유사하게 동작합니다.
keras Layer를 Callbable 객체로 만들면 보다 정확하게는 __call__()이 내부적으로 호출이 됩니다. 이 __call__()은 부모 Layer에 감춰져 있기에 작성해줄 필요가 없으며, __call__()이 해주는 것은 build()를 호출한 뒤에 call()을 호출하는 역할을 합니다.
Custom layer에 call()을 사용하지 않고 __call__()을 바로 적용할 수도 있습니다. 하지만 그렇게 하기 위해서는 build()에서 사용된 weight와 bias의 초기화를 한 뒤에 matrix 연산을 적용하고 tensor로 반환하는 로직을 만들어 줘야 합니다.
class CustomDense(tf.keras.layers.Layer):
# CustomDense 객체 생성시 입력되는 초기화 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()
resize 질문
0
48
1
20251212 Kaggle 런타임에 scikit-learn 설치 실패 트러블 슈팅
0
75
1
Loss와 매트릭 관계
0
61
2
Boston 코랩 실습
0
161
2
배치 정규화의 이해와 적용 2 강의 질문
0
134
2
Augmentation원본에 적용해서 데이터 갯수 자체를 늘리는 행위는 의미가있나요?
0
143
2
Conv함수 안에 activation 을 넣지 않는 이유가 뭔지 궁금합니다.
0
201
2
소프트맥스 관련 질문입니다
0
208
1
강의 관련 질문입니다
0
151
2
residual block과 identity block의 차이
0
183
2
옵티마이저와 경사하강법의 차이가 궁금합니다.
1
236
1
실습 환경
0
165
2
입력 이미지 크기
0
242
2
데이터 증강
0
194
2
albumentations ShiftScaleRotate
0
205
1
Model Input Size 관련
0
279
1
마지막에 bird -> frog 말고도 deer -> frog 도 잘못된것 아닌가요??
0
203
1
일반적인 질문 (kaggle notebook사용)
0
271
2
실무에서 Augmentation 적용 시
0
336
2
안녕하세요 교수님
0
230
1
가중치 초기화(Weight Initialization) 질문입니다.
0
324
1
테스트 데이터셋 predict의 'NoneType' object has no attribute 'shape' 오류
0
405
1
학습이 이상하게 됩니다.
2
1032
2
boston import가 안됩니다
0
224
1





