TF-1.4版本下如何对值为字符串类型的tf张量按分隔符执行拆分操作
问题根因
- 你使用的TensorFlow 1.4版本不存在
tf.strings.split接口,该接口是TensorFlow 2.0版本才新增的,因此方案2报错 - Tensor张量本身没有Python字符串的
split方法,因此方案1报错 - 方案3报错的核心原因是你的
input_label_tensor实际数据类型为float32,并非你预期的字符串类型,而tf.string_split要求输入必须是字符串类型的张量,因此触发了类型不匹配错误。
正确实现方案
步骤1:修复张量类型
优先在数据读取环节直接指定标签列的类型为tf.string,避免后续转换出现格式问题。如果暂时无法修改读取逻辑,可以先做强制类型转换:
# 将float32类型的输入张量转换为字符串类型 str_label_tensor = tf.as_string(input_label_tensor)
步骤2:调用拆分接口
TensorFlow 1.4版本使用tf.string_split完成字符串拆分,该接口默认返回SparseTensor类型,若需要密集格式可以做二次转换:
# 按逗号拆分字符串 sparse_label_list = tf.string_split(str_label_tensor, delimiter=',') # 可选:将稀疏张量转为密集张量,default_value可根据需求调整补位值 dense_label_list = tf.sparse_tensor_to_dense(sparse_label_list, default_value='')
注意事项
如果
tf.as_string转换后出现"0.0,1.0"这类带小数点的不符合预期的格式,说明数据读取阶段错误地将字符串列解析为了数值类型,必须修改数据读取代码,直接指定该列的dtype为tf.string,即可直接传入tf.string_split使用,无需额外转换。
内容的提问来源于stack exchange,提问作者dingx
相关产品推荐
相关产品推荐

