请问下,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参数,具体用法请说明一下,感激不尽~