AI/debugging & trouble shooting
ValueError: The first argument to `Layer.call` must always be passed. 에러 해결 정리
5_Clock
2021. 6. 25. 21:41
반응형
ValueError: The first argument to `Layer.call` must always be passed.
해당 에러는 여러가지 경우에 일어나는데 해결을 할때마다 업로드 할 예정입니다.
근본 원인
기본적으로 tensorflow에서 layer의 틀은
class my_layer(keras.layers.Layer):
def __init__(self):
'''
blah blah
'''
def call(self):
'''
blah blah
'''
위와 같은 형식으로 구성이 됩니다.
그 중 call의 함수를 잘못 호출 했을때(?) 주로 일어나는 에러입니다.
Situation
원인 1
변수안에 함수를 잘못된 형식으로 넣어주었다.
...
base_model = resnet_v2.ResNet101V2()
...
logits, end_points = base_model(input_shape=inputs,
classes=None,
weights='imagenet')
...
해당 소스코드를 실행하게 되면
Traceback (most recent call last):
File "train.py", line 288, in <module>
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
File "C:\Users\ohsh0\anaconda3\envs\deeplab\lib\site-packages\tensorflow\python\platform\app.py", line 40, in run
_run(main=main, argv=argv, flags_parser=_parse_flags_tolerate_undef)
File "C:\Users\ohsh0\anaconda3\envs\deeplab\lib\site-packages\absl\app.py", line 303, in run
_run_main(main, args)
File "C:\Users\ohsh0\anaconda3\envs\deeplab\lib\site-packages\absl\app.py", line 251, in _run_main
sys.exit(main(argv))
File "train.py", line 270, in main
hooks=train_hooks,
File "C:\Users\ohsh0\anaconda3\envs\deeplab\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 349, in train
loss = self._train_model(input_fn, hooks, saving_listeners)
File "C:\Users\ohsh0\anaconda3\envs\deeplab\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1175, in _train_model
return self._train_model_default(input_fn, hooks, saving_listeners)
File "C:\Users\ohsh0\anaconda3\envs\deeplab\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1204, in _train_model_default
self.config)
File "C:\Users\ohsh0\anaconda3\envs\deeplab\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1163, in _call_model_fn
model_fn_results = self._model_fn(features=features, **kwargs)
File "C:\Users\ohsh0\seg_ex\deeplab_v3\deeplab_model.py", line 182, in deeplabv3_plus_model_fn
logits = network(features, mode == tf.estimator.ModeKeys.TRAIN)
File "C:\Users\ohsh0\seg_ex\deeplab_v3\deeplab_model.py", line 130, in model
weights='imagenet')
File "C:\Users\ohsh0\anaconda3\envs\deeplab\lib\site-packages\tensorflow\python\keras\engine\base_layer_v1.py", line 680, in __call__
'The first argument to `Layer.call` must always be passed.')
ValueError: The first argument to `Layer.call` must always be passed.
다음과 같은 에러가 나오는 것을 볼 수 있다.
해결 1
...
base_model = resnet_v2.ResNet101V2
# base_model에 변수를 넣어줄때 뒤에 ()괄호를 없애주면 해결 된다.
...
logits, end_points = base_model(input_shape=inputs,
classes=None,
weights='imagenet')
...
728x90
반응형