本文重点学习tf.contrib.timeseries.RandomWindowInputFn中的数据分割方法
源代码链接tensorflow/contrib/timeseries/python/timeseries/input_pipeline.py.
tensorflow/contrib/timeseries/python/timeseries/input_pipeline.py
定义了切割和重新排列时间序列的方法,主要的特点在于组块。先是将时间序列分割为一个个小的内部连续的窗口,然后再对窗口进行组块,提供给训练。优点是相比于将所有时间序列按顺序循环,可以明显提高训练速度,因为其可以开拓数据并行运算和减少多余的梯度计算。
一个时间序列,由时间(递增的整数向量)和值(一个历元对应一个或多个浮点值)和其它的特征值,以多种格式存储在内存中或者是磁盘中,其存储位置和格式由格式由TimeSeriesReader(通常为’RandomWindowInputFn’)对象规定(如’NumpyReader’,‘CSVReader’).
时间序列通过此管道,映射为特征名和其值的字典。对于训练和评估,它们需要最小化’TrainEvalFeatures.TIMES’和’TrainEvalFeatures.VALUES’.外部的特征可以为任意大小,但是也要对齐到时间戳。时间序列并不需要严格连续和规整,也就是说,时间序列是可以中间有间隔的。但是对于存在的时间,必须有其对应的值。
要使用TimeSeriesInputFn的话,必须要先进行参数配置,然后将一个读取的对象传递给它,之后TimeSeriesInputFn才可以作为Input_fn传递给estimator
RandomWindowInputFn
是对时间序列进行训练和质量评估的主要工具
WholeDatasetInputFn
读取整个序列到内存中,通常用于评估结果,并且为预报做准备
** Class RandomWindowInputFn: **
用途 :用于包装TimeseriesReader以生成随机的批量窗口。
操作 :Tensors先是被处理为序列窗口(一个窗口内时间序列为顺序序列,由tf.train.batch创建)。然后这些窗口随机组合成数据组。Tensor返回的是由create_batch创建的[batch_size, window_size]大小的数据。TimeSeriesInputFn在训练和质量评估中均有作用。