tf.estimator API技術手冊(8)——DNNClassifier(深度神經網路分類器)
(一)簡 介
繼承自Estimator,定義在tensorflow/python/estimator/canned/dnn.py中,用來建立深度神經網路模型。示例如下:
categorical_feature_a = categorical_column_with_hash_bucket(...)
categorical_feature_b = categorical_column_with_hash_bucket(...)
categorical_feature_a_emb = embedding_column(
categorical_column=categorical_feature_a, ...)
categorical_feature_b_emb = embedding_column(
categorical_column=categorical_feature_b, ...)
# 有三個隱層,結點數分別為1024,512,256個
estimator = DNNClassifier(
feature_columns=[categorical_feature_a_emb, categorical_feature_b_emb],
hidden_units=[1024, 512, 256])
# 建立訓練資料輸入函式
def input_fn_train: # returns x, y
pass
estimator.train(input_fn=input_fn_train, steps=100)
# 建立評估資料輸入函式
def input_fn_eval:
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__(
hidden_units,
feature_columns,
model_dir=None,
n_classes=2,
weight_column=None,
label_vocabulary=None,
optimizer='Adagrad',
activation_fn=tf.nn.relu,
dropout=None,
input_layer_partitioner=None,
config=None,
warm_start_from=None,
loss_reduction=losses.Reduction.SUM,
batch_norm=False
)
引數如下:
-
hidden_units:
設定隱層層數和每一層的結點數,如[64, 32]代表第一隱層有64個節點,第二隱層有32個節點,所有的隱層都是全連線的。 -
feature_columns:
特徵列 -
model_dir:
儲存模型的路徑 -
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:
A string filepath to a checkpoint to warm-start from, or a WarmStartSettings object to fully configure warm-starting. If the string filepath is provided instead of a WarmStartSettings, then all weights are warm-started, and it is assumed that vocabularies and Tensor names are unchanged. -
loss_reduction:
定義損失函式,預設為SUM方法 -
batch_norm:
是否要在每個隱層之後使用批量歸一化。
(三)屬 性(Properties)
- config
- model_dir
- model_fn
Returns the model_fn which is bound to self.params.
返回:
model_fn 附有以下標記: def model_fn(features, labels, mode, config)
(四)方 法(Methods)
(1)evaluate(評估)
evaluate(
input_fn,
steps=None,
hooks=None,
checkpoint_path=None,
name=None
)
評估函式,使用input_fn給出的評估資料評估訓練好的模型,引數列表如下:
- input_fn:
一個用來構造用於評估的資料的函式,這個函式應該構造和返回如下的值:一個tf.data.Dataset物件或者一個包含 (features, labels)的元組,它們應當滿足model_fn函式對輸入資料的要求,在後面的例項中我們會詳細介紹。 - checkpoint_path:
用來儲存訓練好的模型 - name:
如果使用者需要在不同的資料集上執行多個評價,如訓練集和測試集,則為要進行評估的名稱,不同的評估度量被儲存在單獨的資料夾中,並分別出現在tensorboard中。
(2)predict(預測)
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返回的一些的張量的第一維度和批處理數量不相等時,這個功能是很用的。
(3)train(訓練)
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物件的列表,用於在檢查點儲存之前或之後立即執行的回撥。