标签(空格分隔): 王小草Tensorflow笔记
笔记整理者:王小草
笔记整理时间:2017年2月27日
笔记对应的官方文档:https://www.tensorflow.org/get_started/input_fn#setup
官方文档最近一次更新时间2017年2月15日
在实际的业务中,可能会遇到很大量的特征,这些特征良莠不齐,层次不一,可能有缺失,可能有噪声,可能规模不一致,可能类型不一样,等等问题都需要我们在建模之前,先预处理特征或者叫清洗特征。那么这清洗特征的过程可能涉及多个步骤可能比较复杂,为了代码的简洁,我们可以将所有的预处理过程封装成一个函数,然后直接往模型中传入这个函数就可以啦~~~
接下来我们看看究竟如何做呢?
1. 如何使用input_fn自定义输入管道
当使用tf.contrib.learn来训练一个神经网络时,可以将特征,标签数据直接输入到.fit(),.evaluate(),.predict()操作中。比如在笔记04中就使用到了,复看一下代码:
# 将特征与标签数据载入
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
filename=IRIS_TRAINING, target_dtype=np.int, features_dtype=np.float32)
test_set = tf.contrib.learn.datasets.base.load_csv_with_header(
filename=IRIS_TEST, target_dtype=np.int, features_dtype=np.float32)
# 然后将两个数据喂给.fit()函数去训练
classifier.fit(x=training_set.data,
y=training_set.target,
steps=2000)
当原始数据不需要或几乎很少需要一些额外的预处理时,使用以上的方式到也不为过。然而在实际的业务中我们往往需要去做大量的特征工程,于是tf.contrib.learn支持使用一个用户自定义的输入函数input_fn来封装数据预处理的逻辑,并且将数据通过管道输送到模型中。
1.1 解剖input_fn函数的结构
以下是一个input_fn函数的基本结构:
def my_input_fn():
# Preprocess your data here...(首先预处理你的数据)
# ...then return 1) a mapping of feature columns to Tensors with
# the corresponding feature data, and 2) a Tensor containing labels
# 然后返回新的特征数据与标签数据(都是以tensor的形式)
return feature_cols, labels
输入函数的主体包括一个特定的预处理输入数据的逻辑,比如去除一些