Bri*_*ian 4 tensorflow tensorflow-datasets
我有.txt一个格式目录中的文件<text>\t<label>.我正在使用TextLineDatasetAPI来使用这些文本记录:
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"]
Run Code Online (Sandbox Code Playgroud)
我想对raw_text功能进行一些字符串清理/处理.当我尝试运行时 line_split.values[0].strip().lower(),我收到以下错误:
AttributeError:'Tensor'对象没有属性'strip'
mrr*_*rry 11
该对象lines_split.values[0]是tf.Tensor表示第0个拆分的对象line.它不是Python字符串,因此它没有.strip()或.lower()方法.相反,您必须将TensorFlow操作应用于张量以执行转换.
TensorFlow目前没有很多字符串操作,但您可以使用tf.py_func()op在以下命令上运行一些Python代码tf.Tensor:
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}
Run Code Online (Sandbox Code Playgroud)
请注意,问题中的代码还存在其他一些问题:
tf.parse_single_example().该操作仅用于解析tf.train.Example协议缓冲区字符串; 在解析文本时不需要使用它,您可以直接从中返回提取的特征_parse_data().dataset.map()而不是dataset.flat_map().只需flat_map()在映射函数的结果是Dataset对象时使用(因此返回值需要展平为单个数据集).必须map()在结果是一个或多个tf.Tensor对象时使用.| 归档时间: |
|
| 查看次数: |
3057 次 |
| 最近记录: |