本文章是对tf.data.TextLineDataset的学习理解
tensorflow学习笔记(使用 tf.data 加载文本数据)
TextLineDataset 通常被用来以文本文件构建数据集(原文件中的一行为一个样本) 。这适用于大多数的基于行的文本数据(例如,诗歌或错误日志) 。下面将使用相同作品(荷马的伊利亚特)三个不同版本的英文翻译,然后训练一个模型来通过单行文本确定译者。
以下是文本数据集建立的流程图
环境搭建
import tensorflow as tf
import tensorflow_datasets as tfds
import os
三个版本的翻译分别来自于:
William Cowper — text
Edward, Earl of Derby — text
Samuel Butler — text
以下是翻译的部分内容
本教程中使用的文本文件已经进行过一些典型的预处理,主要包括删除了文档页眉和页脚,行号,章节标题。请下载这些已经被局部改动过的文件。
通过循环,逐一从浏览器上下载3个文件,返回文件被保存在计算机中的路径。
利用os.path.dirname,去掉文件名,返回目录。
DIRECTORY_URL = 'https://storage.googleapis.com/download.tensorflow.org/data/illiad/'
FILE_NAMES = ['cowper.txt', 'derby.txt', 'butler.txt']
for name in FILE_NAMES:
text_dir = tf.keras.utils.get_file(name, origin=DIRECTORY_URL+name)
parent_dir = os.path.dirname(text_dir)
将文本加载到数据集中
os.path.join用于路径拼接,以’cowper.txt’为例,最终返回C:\Users\HUAWEI.keras\datasets\cowper.txt。
tf.data.TextLineDataset读取文本中数据,一行代表一组数据,将数据映射到tensorflow的dataset。
tf.cast()用于执行tensorflow中张量数据类型转换,此函数中将标签数据格式转换为tf.int64。
def labeler(example, index):
return example, tf.cast(index, tf.int64)
tf.data.TextLineDataset读取文本中数据,一行代表一组数据,将数据映射到tensorflow的dataset。返回
map接收一个函数,Dataset中的每个元素都会被当作这个函数的输入,并将函数返回值作为新的Dataset。该段代码将lines_dataset中的每一项贴上标签,将标签和字符串绑定,返回得labeled_dataset
最后,将所有标记好的数据集打包为labeled_data_sets。
labeled_data_sets = []