如何使用DNN模型分類器

2018-09-30 16:47 更新
tf.estimator.DNNClassifier

DNNClassifier 類

繼承自: Estimator

定義在:tensorflow/python/estimator/canned/dnn.py.

TensorFlow DNN 模型的分類器.

例:

sparse_feature_a = sparse_column_with_hash_bucket(...)
sparse_feature_b = sparse_column_with_hash_bucket(...)

sparse_feature_a_emb = embedding_column(sparse_id_column=sparse_feature_a,
                                        ...)
sparse_feature_b_emb = embedding_column(sparse_id_column=sparse_feature_b,
                                        ...)

estimator = DNNClassifier(
    feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb],
    hidden_units=[1024, 512, 256])

# Or estimator using the ProximalAdagradOptimizer optimizer with
# regularization.
estimator = DNNClassifier(
    feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb],
    hidden_units=[1024, 512, 256],
    optimizer=tf.train.ProximalAdagradOptimizer(
      learning_rate=0.1,
      l1_regularization_strength=0.001
    ))

# Input builders
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)

輸入的 train 和 evaluate 應(yīng)具有以下特點(diǎn),否則將會(huì)產(chǎn)生 KeyError:

  • 如果 weight_column 不是 None,則有特性:key=weight_column,其值為張量.
  • 對(duì)于 feature_columns 中的每一列:
  • 如果列是 _CategoricalColumn,則有特性:key=column.name,其值是一個(gè) SparseTensor.
  • 如果列是一個(gè) _WeightedCategoricalColumn,則有兩個(gè)特性:第一個(gè)是帶有 key 的 id 列名稱,第二個(gè)是帶有 key 的權(quán)重列名稱.這兩個(gè)特性的值必須是SparseTensor.
  • 如果列是 _DenseColumn,則有一個(gè)特性:key=column.name,其值是一個(gè) Tensor.

損失是通過使用 softmax 交叉熵計(jì)算的.

屬性

  • config
  • model_dir
  • params

方法

__init__

__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
)

初始化一個(gè) DNNClassifier 實(shí)例.

ARGS:

  • hidden_units:每層隱藏單元的 Iterable 數(shù).所有層都完全連接.注意:[64, 32]意味著第一層有64個(gè)節(jié)點(diǎn),第二層有32個(gè)節(jié)點(diǎn).
  • feature_columns:包含模型使用的所有特征列的  iterable.集合中的所有項(xiàng)目都應(yīng)該是從 _FeatureColumn 派生的類的實(shí)例.
  • model_dir:用來保存模型參數(shù),圖形等的目錄.這也可用于將檢查點(diǎn)從目錄加載到 estimator 中,以繼續(xù)訓(xùn)練以前保存的模型.
  • n_classes:標(biāo)簽類的數(shù)量.默認(rèn)為 2,即二進(jìn)制分類,必須大于1.
  • weight_column:通過 tf.feature_column.numeric_column 創(chuàng)建的一個(gè)字符串或者 _NumericColumn,用來定義表示權(quán)重的特征列.在訓(xùn)練過程中,它用于降低權(quán)重或增加實(shí)例.它將乘以示例的損失.如果它是一個(gè)字符串,則被用作從特征中中獲取權(quán)重張量的 key;如果是 _NumericColumn,則通過鍵 weight_column.key 獲取原始張量,然后在其上應(yīng)用 weight_column.normalizer_fn 以獲得權(quán)重張量.
  • label_vocabulary:字符串列表,表示可能的標(biāo)簽值.如果給定,標(biāo)簽必須是字符串類型,并且 label_vocabulary 具有任何值.如果沒有給出,這意味著標(biāo)簽已經(jīng)被編碼為整數(shù)或者在[0,1]內(nèi)浮動(dòng), n_classes=2 ;并且被編碼為{0,1,...,n_classes-1}中的整數(shù)值,n_classes> 2.如果沒有提供詞匯表并且標(biāo)簽是字符串,也會(huì)出現(xiàn)錯(cuò)誤.
  • optimizer:tf.Optimizer 用于訓(xùn)練模型的實(shí)例.默認(rèn)為 Adagrad 優(yōu)化器.
  • activation_fn:激活函數(shù)應(yīng)用于每個(gè)層.如果為 None,將使用 tf.nn.relu.
  • dropout:當(dāng)不是 None 時(shí),我們將放棄給定坐標(biāo)的概率.
  • input_layer_partitioner: (可選)輸入層分區(qū).默認(rèn)為 min_max_variable_partitioner 與 min_slice_size64 << 20.
  • config:RunConfig 對(duì)象配置運(yùn)行時(shí)設(shè)置.

evaluate

evaluate(
    input_fn,
    steps=None,
    hooks=None,
    checkpoint_path=None,
    name=None
)

評(píng)估給定的評(píng)估數(shù)據(jù) input_fn 的模型.
對(duì)于每個(gè)步驟,調(diào)用 input_fn,它返回一組數(shù)據(jù).評(píng)估結(jié)束條件:達(dá)到 - steps 批處理,或 - input_fn 引發(fā) end-of-input 異常(OutOfRangeError 或 StopIteration).

ARGS:

  • input_fn:輸入函數(shù)返回一個(gè)元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor.labels - Tensor或帶標(biāo)簽的張量字典.
  • steps:評(píng)估模型的步驟數(shù).如果為 None,直到 input_fn 引發(fā) end-of-input 異常時(shí),評(píng)估結(jié)束.
  • hooks:SessionRunHook 子類實(shí)例的列表,用于評(píng)估調(diào)用中的回調(diào).
  • checkpoint_path:要評(píng)估的特定檢查點(diǎn)的路徑.如果為 None,則使用 model_dir 中的最新檢查點(diǎn).
  • name:如果用戶需要在不同數(shù)據(jù)集上運(yùn)行多個(gè)評(píng)估,例如培訓(xùn)數(shù)據(jù)與測(cè)試數(shù)據(jù),則設(shè)置評(píng)估的名稱.不同評(píng)估的度量值保存在單獨(dú)的文件夾中,并在 tensorboard 中單獨(dú)顯示.

返回:

包含 model_fn 按名稱鍵入指定的評(píng)估度量的 dict ,以及一個(gè)條目 global_step,它包含執(zhí)行此評(píng)估的全局步驟值.

注意:

  • ValueError:如果 steps <= 0.
  • ValueError:如果沒有訓(xùn)練模型,即 model_dir,或者給定的 checkpoint_path 是空的.

export_savedmodel

export_savedmodel(
    export_dir_base,
    serving_input_receiver_fn,
    assets_extra=None,
    as_text=False,
    checkpoint_path=None
)

將推理圖作為 SavedModel 導(dǎo)出到給定的目錄中.

此方法首先調(diào)用 serve_input_receiver_fn 來獲取特征 Tensors,然后調(diào)用此 Estimator 的 model_fn 以生成基于這些特征的模型圖,從而構(gòu)建新的圖.它在新的會(huì)話中將給定的檢查點(diǎn)(或缺少最新的檢查點(diǎn))還原到此圖中.最后,它在給定的 export_dir_base 下面創(chuàng)建一個(gè)時(shí)間戳的導(dǎo)出目錄,并將 SavedModel 寫入其中,其中包含從此會(huì)話保存的單個(gè) MetaGraphDef.

導(dǎo)出的 MetaGraphDef 將為從 model_fn 返回的 export_outputs 字典的每個(gè)元素提供一個(gè) SignatureDef,使用相同的鍵命名.這些密鑰之一始終是signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY,指示當(dāng)一個(gè)服務(wù)請(qǐng)求沒有指定時(shí)將提供哪個(gè)簽名.對(duì)于每個(gè)簽名,輸出由相應(yīng)的ExportOutputs 提供,并且輸入始終是由 serve_input_receiver_fn 提供的輸入接收器.

額外的資產(chǎn)可以通過 extra_assets 參數(shù)寫入 SavedModel.這應(yīng)該是一個(gè) dict,其中每個(gè)鍵都給出了相對(duì)于 assets.extra 目錄的目標(biāo)路徑(包括文件名).相應(yīng)的值給出要復(fù)制的源文件的完整路徑.例如,復(fù)制單個(gè)文件而不重命名的簡單情況被指定為:{'my_asset_file.txt': '/path/to/my_asset_file.txt'}.

ARGS:

  • export_dir_base:一個(gè)包含一個(gè)目錄的字符串,用于創(chuàng)建包含導(dǎo)出的 SavedModels 的時(shí)間戳子目錄.
  • serving_input_receiver_fn:一個(gè)不帶參數(shù)并返回 ServingInputReceiver 的函數(shù).
  • assets_extra:指定如何在導(dǎo)出的 SavedModel 中填充 asset.extra 目錄的 dict,如果為 None,則不需要額外的資源.
  • as_text:是否以文本格式寫入 SavedModel 原型.
  • checkpoint_path:要導(dǎo)出的檢查點(diǎn)路徑.如果為 None(默認(rèn)值),則選擇在模型目錄中找到的最新檢查點(diǎn).

返回:

導(dǎo)出目錄的字符串路徑.

注意:

  • ValueError:如果沒有提供 serve_input_receiver_fn,則不提供 export_outputs,或者沒有找到任何檢查點(diǎn).

predict

predict(
    input_fn,
    predict_keys=None,
    hooks=None,
    checkpoint_path=None
)

返回給定功能的預(yù)測(cè).

ARGS:

  • input_fn:輸入函數(shù)返回的特征,是字符串特征名稱字典的 Tensor 或 SparseTensor.如果它返回一個(gè)元組,則第一個(gè)項(xiàng)目被提取為特征.預(yù)測(cè)繼續(xù),直到input_fn 引發(fā) end-of-input 異常(OutOfRangeError 或 StopIteration).
  • predict_keys:str 列表,要預(yù)測(cè)的鍵的名稱.如果 EstimatorSpec.predictions 是 dict,則使用它.如果使用 predict_keys,那么其余的預(yù)測(cè)將從字典中過濾掉.如果為 None,則返回所有.
  • hooks:SessionRunHook 子類實(shí)例列表.用于預(yù)測(cè)調(diào)用內(nèi)的回調(diào).
  • checkpoint_path:對(duì)具體檢查點(diǎn)的路徑進(jìn)行預(yù)測(cè).如果為 None,則使用 model_dir 中的最新檢查點(diǎn).

獲?。?/h4>

計(jì)算預(yù)測(cè)張量的值.

注意:

  • ValueError:在 model_dir 中找不到訓(xùn)練有素的模型.
  • ValueError:如果批量長度的預(yù)測(cè)不一致.
  • ValueError:如果 predict_keys 和 predictions 之間存在沖突.例如,如果 predict_keys 不是 None,但 EstimatorSpec.predictions 不是 dict.

train

train(
    input_fn,
    hooks=None,
    steps=None,
    max_steps=None
)

訓(xùn)練一個(gè)給定訓(xùn)練數(shù)據(jù) input_fn 的模型.

ARGS:

  • input_fn:輸入函數(shù)返回一個(gè)元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor.labels - Tensor 或帶標(biāo)簽的張量字典.
  • hooks:SessionRunHook 子類實(shí)例列表.用于訓(xùn)練循環(huán)內(nèi)的回調(diào).
  • steps:用于訓(xùn)練模型的步驟數(shù).如果為 None,永遠(yuǎn)訓(xùn)練或訓(xùn)練直到 input_fn 生成 OutOfRange 或 StopIteration 錯(cuò)誤.“steps”是逐步進(jìn)行的.如果你調(diào)用兩次 train(steps = 10),那么 train 總共有20步.如果 OutOfRange 或 StopIteration 在中間出現(xiàn)差錯(cuò),train將在前20步之前停止.如果您不想增加行為,請(qǐng)?jiān)O(shè)置 max_steps 代替.如果設(shè)置,max_steps 必須為 None.
  • max_steps:用于 train 模型的總步驟數(shù).如果為 None,永遠(yuǎn)訓(xùn)練或訓(xùn)練,直到 input_fn 生成 OutOfRange 或 StopIteration 錯(cuò)誤.如果設(shè)置,steps 必須為None.如果 OutOfRange 或者 StopIteration 在中間出現(xiàn)差錯(cuò),訓(xùn)練之前應(yīng)停止 max_steps 步驟.兩次調(diào)用 train (steps=100) 意味著 200次 train 迭代.另一方面,兩個(gè)調(diào)用 train(max_steps=100)意味著第二次調(diào)用將不會(huì)執(zhí)行任何迭代,因?yàn)榈谝淮握{(diào)用完成了所有的100個(gè)步驟.

返回:

返回 self,用于鏈接.

注意:

  • ValueError:如果兩個(gè) steps 和 max_steps 都不是 None.
  • ValueError:如果任一 steps 或是 max_steps <= 0.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)