我很好EfficientNetB 0模型(来自TF 2.9.2中的Keras Applications),我希望尽可能优化最终模型,以便通过Tensorflow C++ API进行推断。在tensorflow.python.framework.convert_to_constants.convert_variables_to_constants_v2
之后应用tf.saved_model.save
对于MobileNet或ResNet 50等几种架构都很好,但对于EfficientNetBX系列则失败了。
作为说明所描述问题的最小代码,以下代码产生了预期的结果:
import tensorflow as tf
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2
input_shape = (224, 224, 3)
model = tf.keras.applications.ResNet50(weights='imagenet', include_top=True, input_shape=input_shape)
#model = tf.keras.applications.EfficientNetB0(weights='imagenet', include_top=True, input_shape=input_shape)
full_model = tf.function(lambda x: model(x))
full_model = full_model.get_concrete_function(tf.TensorSpec(model.inputs[0].shape,
model.inputs[0].dtype,
name='yourInputName'))
frozen_func = convert_variables_to_constants_v2(full_model)
tf.saved_model.save(frozen_func, 'saved_model')
...但在切换到EfficientNetB 0时失败。更准确地说,它会抛出以下错误:ValueError: Found invalid capture Tensor("efficientnetb0/stem_activation/beta:0", shape=(), dtype=float32) when saving custom gradients.
我想知道我是否错过了EfficientNetB 0所需的任何特定步骤,或者它是否是keras/tensorflow错误。在后一种情况下,是否有我可以应用的变通方法?
1条答案
按热度按时间n6lpvg4x1#
这是一个在TF 2.10中出现的bug,到TF 2.12为止还没有解决。
值得一提的是,
EfficientNetV2
没有这个问题(在TF 2.12上测试)。