参考:《深度学习图像识别技术--基于TensorFlow Object Detection API 和 OpenVINO》
预备知识:本文假设你已经读过《从数据的角度理解TensorFlow鸢尾花分类程序》系列文章,或者已经非常熟悉TensorFlow第一个入门程序:鸢尾花分类premade_estimator.py
在TensorFlow中,特征列(Feature column)是原始数据和 Estimator 之间的接口,它告诉Estimator如何使用数据。
原始数据集包含各种各样的特征,有的特征是数值,比如年龄,长度、速度;有的特征是文字,比如,地址、Email内容、数据库查询语句等
神经网络接受的输入,只能是数值,而且是整理好的数值
所以,原始数据 和 神经网络输入需求之间需要一个桥梁,这个桥梁就是特征列(Feature column)
在鸢尾花分类premade_estimator.py程序中,tf.estimator.DNNClassifier的参数 feature_columns 指定模型的输入,特征列在输入数据(由 input_fn 返回)与模型之间架起了桥梁,如下图所示:
要创建特征列,需要调用 tf.feature_column 模块的函数。TensorFlow V1.8的特征列有八种,对应9个函数分别是:
1,数值列(tf.feature_column.numeric_column)
2,分桶列(tf.feature_column.bucketized_column)
3,分类标识列(tf.feature_column.categorical_column_with_identity)
4,分类词汇列(tf.feature_column.categorical_column_with_vocabulary_list 或者 tf.feature_column.categorical_column_with_vocabulary_file)
5,经过哈希处理的列(tf.feature_column.categorical_column_with_hash_bucket)
6,组合列(tf.feature_column.crossed_column)
7,指标列(tf.feature_column.indicator_column)
8,嵌入列(tf.feature_column.embedding_column)
如下图所示:
将特征列传递给 Estimator的注意事项:
下面的列表所示,并非所有 Estimator 都支持所有类型的 feature_columns 参数:
1,LinearClassifier 和 LinearRegressor:接受所有类型的特征列。
2,DNNClassifier 和 DNNRegressor:只接受密集列。其他类型的列必须封装在 indicator_column 或 embedding_column 中。
3,DNNLinearCombinedClassifier 和 DNNLinearCombinedRegressor:
a). linear_feature_columns 参数接受任何特征列类型。
b). dnn_feature_columns 参数只接受密集列。