tensorflow 2.0, variable_scope(), ошибка типа: __call__() получил неожиданный аргумент ключевого слова ‘partition_info’

#tensorflow #tensorflow2.0

#тензорный поток #тензорный поток 2.0

Вопрос:

Я преобразовал модель CNN из tf1.x в tf2.0 с помощью tf_upgrade_v2 , но когда я использовал эту преобразованную модель, я получил ошибку:

File "/home/hsw/virtual_env/tf2.0/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 2492, in default_variable_creator
import_scope=import_scope, distribute_strategy=distribute_strategy)
File "/home/hsw/virtual_env/tf2.0/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 216, in __call__
return super(VariableMetaclass, cls).__call__(*args, **kwargs)
File "/home/hsw/virtual_env/tf2.0/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 422, in __init__
constraint=constraint)
File "/home/hsw/virtual_env/tf2.0/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 545, in _init_from_args
initial_value() if init_from_fn else initial_value,
File "/home/hsw/virtual_env/tf2.0/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 886, in <lambda>
shape.as_list(), dtype=dtype, partition_info=partition_info)
TypeError: __call__() got an unexpected keyword argument 'partition_info'

похоже, что в variables.py что-то не так, и преобразованная модель выглядит примерно так :

     with tf.compat.v1.variable_scope('backbone', reuse=tf.compat.v1.AUTO_REUSE):
      net = tf.compat.v1.layers.separable_conv2d(inputs, 16, 3, 1, 'same',
                                     activation=tf.nn.elu,
                                     depthwise_initializer=tf.keras.initializers.glorot_normal(),
                                     pointwise_initializer=tf.keras.initializers.glorot_normal(),
                                     name='conv1')
      net = tf.compat.v1.layers.max_pooling2d(net, 2, 2, padding='same')
      net = tf.compat.v1.layers.separable_conv2d(net, 32, 3, 1, 'same',
                                     activation=tf.nn.elu,
                                     depthwise_initializer=tf.keras.initializers.glorot_normal(),
                                     pointwise_initializer=tf.keras.initializers.glorot_normal(),
                                     name='conv2')
  

как следует поступить, чтобы решить эту проблему?

Ответ №1:

Это ошибка, и она уже была опубликована на github. Смотрите обсуждение там:https://github.com/tensorflow/tensorflow/issues/26665#issuecomment-472950222