【发布时间】:2021-08-21 03:45:45
【问题描述】:
我想要一个 tf.function 从标签文件返回一个固定长度的一维布尔张量,每个匹配的索引范围为 True。索引范围可以重叠。但我坚持将索引转换为平面布尔张量。
我正在读取一个文件,其中每一行都是一个标签和一个固定长度的开始和结束索引。对于这个例子,我们可以说固定长度是 50。
标签文件内容示例:
frog 4.0 10.0
frog 20.0 30.0
goat 2.0 20.0
camel 4.0 15.0
原来是这样
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
这是一个到目前为止运行良好的 tf.function,但我被困在如何获得最终张量上。我正在使用 dataset.map(load_label) 执行这个 tf.function。
def load_label(file_path, accepted_labels=['goat', 'frog']):
label_datas = tf.io.read_file(file_path)
label_datas = tf.strings.strip(label_datas)
label_datas = tf.strings.split(label_datas, sep='\n')
label_datas = tf.strings.split(label_datas, sep=' ')
label_datas = label_datas.to_tensor(default_value='0.0', shape=[None, 3])
list_of_indices = []
for label_data in label_datas:
equal = tf.math.equal(label_data[0], accepted_labels)
if tf.reduce_any(equal):
start = tf.strings.to_number(label_data[1], out_type=tf.float32)
end = tf.strings.to_number(label_data[2], out_type=tf.float32)
start = tf.cast(start, tf.int32)
end = tf.cast(end, tf.int32)
list_of_indices.append(tf.range(start, end, 1))
list_of_indices = tf.concat(list_of_indices, axis=0)
list_of_indices, idx = tf.unique(list_of_indices)
【问题讨论】:
标签: python tensorflow