继承自Estimator,定义在tensorflow/python/estimator/canned/dnn_linear_combined.py中,用来建立深度神经网络线性组合分类器。示例如下:
numeric_feature = numeric_column(...)
categorical_column_a = categorical_column_with_hash_bucket(...)
categorical_column_b = categorical_column_with_hash_bucket(...)
categorical_feature_a_x_categorical_feature_b = crossed_column(...)
categorical_feature_a_emb = embedding_column(
categorical_column=categorical_feature_a, ...)
categorical_feature_b_emb = embedding_column(
categorical_column=categorical_feature_b, ...)
estimator = DNNLinearCombinedClassifier(
# 宽度设置
linear_feature_columns=[categorical_feature_a_x_categorical_feature_b],
linear_optimizer=tf.train.FtrlOptimizer(...),
# 深度设置
dnn_feature_columns=[
categorical_feature_a_emb, categorical_feature_b_emb,
numeric_feature],
# 定义网络结构
dnn_hidden_units=[1000, 500, 100],
dnn_optimizer=tf.train.ProximalAdagradOptimizer(...),
# 热启动设置
warm_start_from="/path/to/checkpoint/dir")
# 定义数据输入函数
def input_fn_train: # returns x, y
pass
estimator.train(input_fn=input_fn_train, steps=100)
def input_fn_eval: # returns x, y
pass
metrics = estimator.evaluate(input_fn=input_fn_eval, steps=10)
def input_fn_predict: # returns x, None
pass
predictions = estimator.predict(input_fn=input_fn_predict)
__init__(
model_dir=None,
linear_feature_columns=None,
linear_optimizer='Ftrl',
dnn_feature_columns=None,
dnn_optimizer='Adagrad',
dnn_hidden_units=None,
dnn_activation_fn=tf.nn.relu,
dnn_dropout=None,
n_classes=2,
weight_column=None,
label_vocabulary=None,
input_layer_partitioner=None,
config=None,
warm_start_from=None,
loss_reduction=losses.Reduction.SUM,
batch_norm=False,
linear_sparse_combiner='sum'
)
参数如下:
model_dir:
保存模型的目录
linear_feature_columns:
线性特征列
linear_optimizer:
线性优化器
dnn_feature_columns:
深度神经网络特征列
dnn_optimizer:
深度神经网络优化器
dnn_hidden_units:
深度神经网络的结构
dnn_activation_fn:
深度神经网络中的激活函数,默认使用Relu函数
dnn_dropout:
dropout操作
n_classes
标签种类,默认为2
weight_column:
由 tf.feature_column.numeric_column创建的一个字符串或者数字列用来呈现特征列。它将会被乘以example的训练损失。
label_vocabulary:
一个字符串列表用来呈现可能的标签取值,如果给出,则必须为字符型,如果没有给出,则会默认编码为整型,为{0, 1,…, n_classes-1} 。
optimizer:
选择优化器,默认使用Adagrad optimizer,激活函数为tf.nn.relu。
input_layer_partitioner:
输入层分割器,min_max_variable_partitioner和min_slice_size默认为64 << 20
config:
一个运行配置对象,用来配置运行时间。
warm_start_from:
热启动选项。
loss_reduction:
定义损失函数,默认为SUM方法。
batch_norm:
是否要在每个隐层之后使用批量归一化。
linear_sparse_combiner:
线性稀疏组合器,当一个绝对特征列是多价的时候,指定如何去减少线性模型。
返回:
model_fn 附有以下标记: def model_fn(features, labels, mode, config)
evaluate(
input_fn,
steps=None,
hooks=None,
checkpoint_path=None,
name=None
)
评估函数,使用input_fn给出的评估数据评估训练好的模型,参数列表如下:
predict(
input_fn,
predict_keys=None,
hooks=None,
checkpoint_path=None,
yield_single_examples=True
)
使用训练好的模型对新实例进行预测,以下为参数列表:
input_fn:
一个用来构造用于评估的数据的函数,这个函数应该构造和返回如下的值:一个tf.data.Dataset对象或者一个包含 (features, labels)的元组,它们应当满足model_fn函数对输入数据的要求,在后面的实例中我们会详细介绍。
predict_keys:
预测函数最终会返回一系列的结果,但我们可以有选择地让其输出,可供选择的keys列表为[‘logits’, ‘logistic’, ‘probabilities’, ‘class_ids’, ‘classes’],如果不指定的话,默认返回所有值。
hooks:
tf.train.SessionRunHook的子类实例列表,在预测调用中用于传回。
checkpoint_path:
训练好的模型的目录
yield_single_examples:
可以选择False或是True,如果选择False,由model_fn返回整个批次,而不是将批次分解为单个元素。当model_fn返回的一些的张量的第一维度和批处理数量不相等时,这个功能是很用的。
train(
input_fn,
hooks=None,
steps=None,
max_steps=None,
saving_listeners=None
)
用于训练模型,以下为参数列表:
input_fn:
一个用来构造用于评估的数据的函数,这个函数应该构造和返回如下的值:一个tf.data.Dataset对象或者一个包含 (features, labels)的元组,它们应当满足model_fn函数对输入数据的要求,在后面的实例中我们会详细介绍。
hooks:
tf.train.SessionRunHook的子类实例列表,在预测调用中用于传回。
steps:
模型训练的次数,如果不指定,则会一直训练知道input_fn传回的数据消耗完为止。如果你不想要增量表现,就设置max_steps来替代,注意设置了steps,max_steps必须为None,设置了max_steps,steps必须为None。
max_steps:
模型训练的总次数,注意设置了steps,max_steps必须为None,设置了max_steps,steps必须为None。
saving_listeners:
CheckpointSaverListener对象的列表,用于在检查点保存之前或之后立即运行的回调。