TF2.3.引入变长稀疏特征后,导出的PB模型特征名丢失,输入参数名变为 args_0、args_1

请问下,TF2.3.引入变长稀疏特征后,导出的PB模型特征名丢失,输入参数名变为 args_0、args_1… 该如何解决

相同问题:

[1] tensorflow - tensorflow2 sparse input name missing in saved model - Stack Overflow

[2] https://github.com/tensorflow/tensorflow/issues/42018

如上图所示,当特征tags 为定长类型FixedLenFeature,导出的PB模型输入structured_input_signature 中可正常保留所有的输入特征名称,且线上TF-Serving可正常使用。

但是,如果特征tags 为VarLenFeature 变长稀疏类型,则导出的PB模型中输入structured_input_signature中特征名称全部丢失,变为 args_0、args_1… 这种,且线上TF-Serving时,构造14个特征的Example结构,服务报错:

其中,14 是 离线模型定义 = 13个Fixed定长特征 + 1个稀疏特征

最后模型导出时,这1个稀疏特征会被分解成3个参数

(tags作为稀疏张量,在存入PB格式时,会分成三个参数: indices,values 和 shape)

所以,PB格式下模型输入为 13+3

以下是保存模型的代码,均是相同错误情况。

保存路径1

save_path = os.path.join(ckpt_dir, ‘./model’)

model.save(save_path, save_format=‘tf’)

保存路径2

save_path2 = os.path.join(ckpt_dir, ‘./model2’)

tf.saved_model.save(model, save_path2)

同理,定义

“tags”: tf.io.RaggedFeature(tf.string, row_splits_dtype=tf.int64)

也是类似错误:input size does not match signature: 14!=15

貌似是输入函数签名问题,是不是需要重写signature参数,具体用法请说明一下,感激不尽~

我在这方面不是很有经验,或许换最新版的TensorFlow试试看?或者如果2.3及之后的版本没什么你需要用到的功能的话,留在2.2版本也未尝不可。感觉这种似乎是TF本身的Bug,可能只好通过给TF提issue来解决了。

1 Like