我在<div class="container">
<div class="circle">1</div>
<img class="circle" src="https://pbs.twimg.com/profile_images/887828156886986752/F7XIdhSg_400x400.jpg" />
<div class="circle">KU</div>
</div>
格式的目录中有.txt
个文件。我使用<text>\t<label>
API来使用这些文本记录:
TextLineDataset
我想对raw_text功能进行一些字符串清理/处理。当我尝试运行filenames = ["/var/data/file1.txt", "/var/data/file2.txt"]
dataset = tf.contrib.data.Dataset.from_tensor_slices(filenames)
dataset = dataset.flat_map(
lambda filename: (
tf.contrib.data.TextLineDataset(filename)
.map(_parse_data)))
def _parse_data(line):
line_split = tf.string_split([line], '\t')
features = {"raw_text": tf.string(line_split.values[0].strip().lower()),
"label": tf.string_to_number(line_split.values[1],
out_type=tf.int32)}
parsed_features = tf.parse_single_example(line, features)
return parsed_features["raw_text"], raw_features["label"]
时,出现以下错误:
属性错误:&#39; Tensor&#39;对象没有属性&#39; strip&#39;
答案 0 :(得分:10)
对象lines_split.values[0]
是一个tf.Tensor
对象,代表line
的第0个分割。它不是Python字符串,因此它没有.strip()
或.lower()
方法。相反,您必须将TensorFlow操作应用于张量以执行转换。
TensorFlow目前没有很多string operations,但你可以使用tf.py_func()
op在tf.Tensor
上运行一些Python代码:
def _parse_data(line):
line_split = tf.string_split([line], '\t')
raw_text = tf.py_func(
lambda x: x.strip().lower(), line_split.values[0], tf.string)
label = tf.string_to_number(line_split.values[1], out_type=tf.int32)
return {"raw_text": raw_text, "label": label}
请注意,问题中的代码存在其他一些问题:
tf.parse_single_example()
。该操作仅用于解析tf.train.Example
协议缓冲区字符串;解析文本时不需要使用它,并且可以直接从_parse_data()
返回提取的特征。dataset.map()
代替dataset.flat_map()
。当映射函数的结果是flat_map()
对象时,您只需要使用Dataset
(因此返回值需要展平到单个数据集中)。当结果是一个或多个map()
个对象时,您必须使用tf.Tensor
。