如何在TensorFlow中拼接不同类型张量并导出保存为文本文件
报错原因
tf.concat要求所有输入张量的数据类型完全一致,你的输入同时包含int32、字符串、float32三种类型,不满足接口要求。- 你定义的整数列表、字符列表、字符串列表都是形状为
(10,)的1维张量,不存在轴1,直接指定axis=1拼接也会触发维度不匹配问题。 tf.io.write_file要求输入为单个字符串标量,不能直接传入多维张量。
解决方案
你可以先将所有张量统一转为字符串类型、对齐维度后再拼接,最终拼接为单个完整字符串写入文件,代码如下:
import os os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" import tensorflow as tf integers_list = tf.convert_to_tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) char_list = tf.convert_to_tensor(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']) string_list = tf.convert_to_tensor(['abcd', 'bcde', 'cdef', 'defg', 'efgh', 'fghi', 'ghij', 'hijk', 'ijkl', 'jklm']) float_matrix = tf.convert_to_tensor([[0.0, 0.1, 0.2, 0.3], [0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.4, 0.5], [0.3, 0.4, 0.5, 0.6], [0.4, 0.5, 0.6, 0.7], [0.5, 0.6, 0.7, 0.8], [0.6, 0.7, 0.8, 0.9], [ 0.7, 0.8, 0.9, 1.0], [0.8, 0.9, 1.0, 1.1], [0.9, 1.0, 1.1, 1.2]]) # 给1维张量增加维度,对齐为(10, 1)的2维结构 integers_col = tf.expand_dims(integers_list, axis=-1) char_col = tf.expand_dims(char_list, axis=-1) string_col = tf.expand_dims(string_list, axis=-1) # 统一转为字符串类型 integers_col_str = tf.as_string(integers_col) char_col_str = tf.as_string(char_col) string_col_str = tf.as_string(string_col) float_matrix_str = tf.as_string(float_matrix) # 按列拼接 concat_tensor = tf.concat([integers_col_str, char_col_str, string_col_str, float_matrix_str], axis=1) # 拼接为完整文本内容 lines = tf.strings.reduce_join(concat_tensor, axis=1, separator='\t') content = tf.strings.reduce_join(lines, axis=0, separator='\n') # 写入文件 tf.io.write_file("filename1.txt", content, name=None)
如果觉得TensorFlow的字符串操作太繁琐,也可以转成numpy数组后直接遍历写入,逻辑更直观:
import os os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" import tensorflow as tf # 数据定义部分同上,省略 with open("filename1.txt", "w", encoding="utf-8") as f: for idx in range(len(integers_list)): int_val = integers_list[idx].numpy() char_val = char_list[idx].numpy().decode() str_val = string_list[idx].numpy().decode() float_vals = "\t".join(map(str, float_matrix[idx].numpy())) f.write(f"{int_val}\t{char_val}\t{str_val}\t{float_vals}\n")
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

