티스토리 뷰

반응형

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
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
250x250