получение ошибки при обучении yolov3: — Ошибка значения: tf.function-оформленная функция пыталась создать переменные при не первом вызове

#tensorflow #yolo

#tensorflow #yolo

Вопрос:

Я обучаю пользовательскую модель yolov3 и получаю ошибку «Ошибка значения: функция, оформленная tf.function, пыталась создать переменные не при первом вызове». при подгонке модели для обучения. получение ошибки в заявлении fit_generator. Может кто-нибудь, пожалуйста, помочь?

 train_generator = BatchGenerator(
        instances           = train_ints, 
        anchors             = config['model']['anchors'],   
        labels              = labels,        
        downsample          = 32, # ratio between network input's size and network output's size, 32 for YOLOv3
        max_box_per_image   = max_box_per_image,
        batch_size          = config['train']['batch_size'],
        min_net_size        = config['model']['min_input_size'],
        max_net_size        = config['model']['max_input_size'],   
        shuffle             = True, 
        jitter              = 0.3, 
        norm                = normalize
    )


    train_model, infer_model = create_model(
        nb_class            = len(labels), 
        anchors             = config['model']['anchors'], 
        max_box_per_image   = max_box_per_image, 
        max_grid            = [config['model']['max_input_size'], config['model']['max_input_size']], 
        batch_size          = config['train']['batch_size'], 
        warmup_batches      = warmup_batches,
        ignore_thresh       = config['train']['ignore_thresh'],
        multi_gpu           = multi_gpu,
        saved_weights_name  = config['train']['saved_weights_name'],
        lr                  = config['train']['learning_rate'],
        grid_scales         = config['train']['grid_scales'],
        obj_scale           = config['train']['obj_scale'],
        noobj_scale         = config['train']['noobj_scale'],
        xywh_scale          = config['train']['xywh_scale'],
        class_scale         = config['train']['class_scale'],
    )

    ###############################
    #   Kick off the training
    ###############################
    callbacks = create_callbacks(config['train']['saved_weights_name'], config['train']['tensorboard_dir'], infer_model)
    print ("before kickoff", len(train_generator))
    print ("before kickoff", train_generator)
    **train_model.fit_generator(
        generator        = train_generator,** 
        steps_per_epoch  = len(train_generator) * config['train']['train_times'], 
        epochs           = config['train']['nb_epochs']   config['train']['warmup_epochs'],
        #epochs           = 1, 
        verbose          = 2 if config['train']['debug'] else 1,
        callbacks        = callbacks, 
        workers          = 2,
        max_queue_size   = 8
    )
    print ("after kickoff")                   
 

Ошибка, которую я получаю, это :

ПРЕДУПРЕЖДЕНИЕ: tensorflow:модели не удалось выполнить сериализацию в формате JSON. Игнорирование… Слой YoloLayer имеет аргументы в __init__ и, следовательно, должен переопределяться get_config . Обратная трассировка эпохи 1/21 (последний последний вызов): Файл «train.py «, строка 300, в основном файле (args) «train.py «, строка 269, в главном файле train_model.fit_generator(файл «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/util/deprecation.py «, строка 324, в new_func возвращает файл func(*args, **kwargs) «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py» , строка 1815, в fit_generator возвращает self.fit(файл «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py» , строка 108, в файле _method_wrapper метод возврата(self, *args, **kwargs) «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py» , строка 1098, в файле fit tmp_logs = train_function(итератор) «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py», строка 780, в вызове result = self._call(* аргументы, ** kwds) «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py» , строка 840, в _call возвращает self._stateless_fn(*аргументы, **kwds) «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py «, строка 2828, в файле call graph_function, args, kwargs = self._maybe_define_function(args, kwargs) «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py «, строка 3213, в файле _maybe_define_function graph_function = self._create_graph_function(аргументы, kwargs) «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py «, строка 3065, в _create_graph_function func_graph_module.func_graph_from_py_func( Файл «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py» , строка 986, в файле func_graph_from_py_func func_outputs = python_func(*func_args, **func_kwargs) «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py» , строка 600, в wrapped_fn возвращает weak_wrapped_fn().завернутый (* args, ** kwds) Файл «/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py» , строка 973, в вызове оболочки e.ag_error_metadata.to_exception(e) Ошибка значения: в пользовательском коде:

 /Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:806 train_function  *
    return step_function(self, iterator)
/Users/karthikeyan/Desktop/table/yolo.py:46 call  *
    batch_seen = tf.Variable(0.)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/ops/variables.py:262 __call__  **
    return cls._variable_v2_call(*args, **kwargs)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/ops/variables.py:244 _variable_v2_call
    return previous_getter(
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/ops/variables.py:67 getter
    return captured_getter(captured_previous, **kwargs)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2857 creator
    return next_creator(**kwargs)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/ops/variables.py:67 getter
    return captured_getter(captured_previous, **kwargs)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2857 creator
    return next_creator(**kwargs)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/ops/variables.py:67 getter
    return captured_getter(captured_previous, **kwargs)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2857 creator
    return next_creator(**kwargs)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/ops/variables.py:67 getter
    return captured_getter(captured_previous, **kwargs)
/Users/karthikeyan/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py:701 invalid_creator_scope
    raise ValueError(

ValueError: tf.function-decorated function tried to create variables on non-first call.              
 

Ответ №1:

Я могу найти ответ. Включая «tf.config.experimental_run_functions_eagerly (True)», это утверждение после импорта tensorflow решило проблему.