TensorFlow C++加载PB模型出现remapper failed错误的咨询
TensorFlow C++加载PB模型时Grappler优化器报错问题
问题背景
使用Python 3.12.5搭配TensorFlow 2.17.0训练Keras模型并导出为PB文件,计划部署到Windows平台的C++软件中做推理,采用TensorFlow for C 2.15.0作为DLL。加载PB模型时出现错误,但当前推理功能正常;切换到TensorFlow for C 2.13.0时无此错误,但希望使用新版本库。
错误日志
2024-09-01 16:09:38.024565: E tensorflow/core/grappler/optimizers/meta_optimizer.cc:961] remapper failed: INVALID_ARGUMENT: Mutation::Apply error: fanout 'generator/tf.concat_6/concat' exist for missing node 'generator/conv2d/BiasAdd'.
核心疑问
- 该错误是否需要重视?
- 是否会导致性能损失?
- 若有影响,该如何修复?
补充信息
模型生成代码
n_channels = 3 # 3 for RGB or 1 for grayscale def generator(): layers = [] filters = [64, 128, 256, 512, 512, 512, 512, 512, 512, 512, 512, 512, 256, 128, 64] # filter layers 0 - 14 input = tf.keras.layers.Input(shape = (None, None, n_channels), name = "gen_input_image") for i in range(1 + len(filters)): if i == 0: # layer 0 convolution convolved = tf.keras.layers.Conv2D(filters[0], kernel_size = 4, strides = (2, 2), padding = "same", kernel_initializer = tf.initializers.GlorotUniform())(input) layers.append(convolved) elif 1 <= i <= 7: # convolution layers rectified = tf.keras.layers.LeakyReLU(negative_slope = 0.2)(layers[-1]) convolved = tf.keras.layers.Conv2D(filters[i], kernel_size = 4, strides = (2, 2), padding = "same", kernel_initializer = tf.initializers.GlorotUniform())(rectified) normalized = tf.keras.layers.LayerNormalization()(convolved) layers.append(normalized) elif 8 <= i <= 14: # deconvolution layers if i == 8: rectified = tf.keras.layers.ReLU()(layers[-1]) else: concatenated = tf.keras.layers.Concatenate(axis = 3)([layers[-1], layers[15 - i]]) rectified = tf.keras.layers.ReLU()(concatenated) deconvolved = tf.keras.layers.Conv2DTranspose(filters[i], kernel_size = 4, strides = (2, 2), padding = "same", kernel_initializer = tf.initializers.GlorotUniform())(rectified) normalized = tf.keras.layers.LayerNormalization()(deconvolved) layers.append(normalized) else: # layer 15 concatenated = tf.keras.layers.Concatenate(axis = 3)([layers[-1], layers[0]]) rectified = tf.keras.layers.ReLU()(concatenated) deconvolved = tf.keras.layers.Conv2DTranspose(n_channels, kernel_size = 4, strides = (2, 2), padding = "same", kernel_initializer = tf.initializers.GlorotUniform())(rectified) rectified = tf.keras.layers.ReLU()(deconvolved) output = tf.keras.layers.Subtract()([input, rectified]) return tf.keras.Model(inputs = input, outputs = output, name = "generator")
模型可视化代码
from keras.utils import plot_model plot_model(model, to_file='model.png', show_shapes=True, show_dtype=True, show_layer_names=True)
额外说明
- 模型在Python环境中运行正常,C++端加载后推理功能也正常,推测错误与Grappler优化器相关。
- 怀疑问题可能和输入形状设为
(None, None)有关,模型需要支持≥256的任意图像尺寸,此前这样设置无问题。 - 曾找到类似问题但无有效回复,且无权限评论对应线程。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

