在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網>源碼下載>數值算法/人工智能>

TensorFlow模型介紹

大?。?/span>0.6 MB 人氣: 2017-09-28 需要積分:2

  模型定義

  定義wide and deep模型是比較簡單的,tutorial中提供了比較完整的模型構建實例:

  獲取輸入

  模型的輸入是一個python的dataframe。如tutorial的實例代碼,可以通過pandas.read_csv從CSV文件中讀入數據構建data frame。

  定義feature columns

  tf.contrib.layers中提供了一系列的函數定義不同類型的feature columns:

  tf.contrib.layers.sparse_column_with_XXX構建低維離散特征

  sparse_feature_a = sparse_column_with_hash_bucket(…)

  sparse_feature_b = sparse_column_with_hash_bucket(…)

  tf.contrib.layers.crossed_column構建離散特征的組合

  sparse_feature_a_x_sparse_feature_b = crossed_column([sparse_feature_a, sparse_feature_b], …)

  tf.contrib.layers.real_valued_column構建連續(xù)型實數特征

  real_feature_a = real_valued_column(…)

  tf.contrib.layers.embedding_column構建embedding特征

  sparse_feature_a_emb = embedding_column(sparse_id_column=sparse_feature_a, )

  定義模型

  定義分類模型:

  m = tf.contrib.learn.DNNLinearCombinedClassifier( n_classes = n_classes, // 分類數目 weight_column_name = weight_column_name, // 訓練實例的權重 model_dir = model_dir, // 模型目錄 linear_feature_columns = wide_columns, // 輸入線性模型的feature columns linear_optimizer = tf.train.FtrlOptimizer( 。。.), // 線性模型權重更新的optimizer dnn_feature_columns = deep_columns, // 輸入DNN模型的feature columns dnn_hidden_units=[ 100, 50], // DNN模型的隱藏層單元數目 dnn_optimizer=tf.train.AdagradOptimizer( 。。.) // DNN模型權重更新的optimizer )

  需要指出的是:模型的model_dir同下面會提到的export模型的目錄是2個不同的目錄,model_dir存放模型的graph和summary數據,如果model_dir存放了上一次訓練的模型數據,訓練時會從model_dir恢復上一次訓練的模型并在此基礎上進行訓練。我們用tensorboard加載顯示的模型數據也是從該目錄下生成的。模型export的目錄則主要是用于tensorflow server啟動時加載模型的servable實例,用于線上預測服務。

  如果要使用回歸模型,可以如下定義:

  m = tf.contrib.learn.DNNLinearCombinedRegressor( weight_column_name = weight_column_name, linear_feature_columns = wide_columns, linear_optimizer = tf.train.FtrlOptimizer( 。。.), dnn_feature_columns = deep_columns, dnn_hidden_units=[ 100,50], dnn_optimizer=tf.train.AdagradOptimizer( 。。.) ) 訓練評測

  訓練模型可以使用fit函數:m.fit(input_fn=input_fn(df_train)),評測使用evaluate函數:m.evaluate(input_fn=input_fn(df_test))。Input_fn函數定義如何從輸入的dataframe構建特征和標記:

  def input_fn(df) // tf.constant構建constant tensor,df[k].values是對應feature column的值構成的listcontinuous_cols = {k: tf.constant(df[k].values) fork inCONTINUOUS_COLUMNS} // tf.SparseTensor構建sparse tensor,SparseTensor由indices,values, dense_shape三// 個dense tensor構成,indices中記錄非零元素在sparse tensor的位置,values是// indices中每個位置的元素的值,dense_shape指定sparse tensor中每個維度的大小// 以下代碼為每個category column構建一個[df[k].size,1]的二維的SparseTensor。categorical_cols = { k: tf.SparseTensor( indices=[[i, 0] fori inrange(df[k]。 size)], values=df[k].values, dense_shape=[df[k]。 size, 1]) fork inCATEGORICAL_COLUMNS } // 可以用以下示意圖來表示以上代碼構建的sparse tensor// label是一個 constanttensor,記錄每個實例的labellabel= tf. constant(df[LABEL_COLUMN].values) // features是continuous_cols和categorical_cols的union構成的dict // dict中每個entry的key是feature column的name,value是feature column值的tensor returnfeatures, label輸出

  模型通過export輸出到一個指定目錄,tensorflow serving從該目錄加載模型提供在線預測服務:m.export(export_dir=export_dir,input_fn = export._default_input_fn

  use_deprecated_input_fn=True,signature_fn=signature_fn)

  input_fn函數定義生成模型servable實例的特征,signature_fn函數定義模型輸入輸出的signature。

  由于在tensorflow1.0之后export已經deprecate,需要用export_savedmodel來替代,所以本文就不對export進行更多講解,只在文末給出我們是如何使用它的,建議所有使用者以后切換到最新的API。

  模型詳解

  wide and deep模型是基于TF.learn API來實現的,其源代碼實現主要在tensorflow.contrib.learn.python.learn.estimators中。以分類模型為例,wide與deep結合的分類模型對應的類是DNNLinearCombinedClassifier,實現在源文件dnn_linear_combined.py。 我們先看看DNNLinearCombinedClassifier的初始化函數的完整定義,看構造一個wide and deep模型可以輸入哪些參數

  def __init__( self, model_dir =None, n_classes =2, weight_column_name =None, linear_feature_columns =None, linear_optimizer =None, joint_linear_weights =False, dnn_feature_columns =None, dnn_optimizer =None, dnn_hidden_units =None, dnn_activation_fn =nn .relu, dnn_dropout =None, gradient_clip_norm =None, enable_centered_bias =False, config =None, feature_engineering_fn =None, embedding_lr_multipliers =None):

  我們可以將類的構造函數中的參數分為以下幾組

  基礎參數

  model_dir

  我們訓練的模型存放到model_dir指定的目錄中。如果我們需要用tensorboard來DEBUG模型,將tensorboard的logdir指向該目錄即可:tensorboard –logdir=$model_dir

  n_classes

  分類數。默認是二分類,》2則進行多分類。

  weight_column_name

  定義每個訓練樣本的權重。訓練時每個訓練樣本的訓練誤差乘以該樣本的權重然后用于權重更新梯度的計算。如果需要為每個樣本指定權重,input_fn返回的features里需要包含一個以weight_column_name為列名的列,該列的長度為訓練樣本的數目,列中每個元素對應一個樣本的權重,數據類型是float,如以下偽代碼:

  weight = tf .constant(df[WEIGHT_COLUMN_NAME] .values, dtype=float32);features[weight_column_name] = weight

  config

  指定運行時配置參數

  eature_engineering_fn

  對輸入函數input_fn輸出的(features, label)進行后處理生成新的(features’, label’)然后輸入給模型訓練函數model_fn使用。

  call_model_fn(): feature, labels = self._feature_engineering_fn(feature, labels) 線性模型相關參數

  linear_feature_columns

  線性模型的輸入特征

  linear_optimizer

  線性模型的優(yōu)化函數,定義權重的梯度更新算法,默認采用FTRL。所有默認支持的linear_optimizer和dnn_optimizer可以在optimizer.py的OPTIMIZER_CLS_NAMES變量中找到相關定義。

  join_linear_weights

  按照代碼中的注釋,如果join_linear_weights= true, 線性模型的權重會存放在一個tf.Variable中,可以加快訓練,但是linear_feature_columns中的特征列必須都是sparse feature column并且每個feature column的combiner必須是“sum”。經過自己線下的對比試驗,對模型的預測能力似乎沒有太大影響,對訓練速度有所提升,最終訓練模型時我們保持了默認值。

  DNN模型相關參數

  dnn_feature_columns

  DNN模型的輸入特征

  dnn_optimizer

  DNN模型的優(yōu)化函數,定義各層權重的梯度更新算法,默認采用Adagrad。

  dnn_hidden_units

  每個隱藏層的神經元數目

  dnn_activation_fn

  隱藏層的激活函數,默認采用RELU

  dnn_dropout

  模型訓練中隱藏層單元的drop_out比例

  gradient_clip_norm

  定義gradient clipping,對梯度的變化范圍做出限制,防止gradient vanishing 或gradient explosion。wide and deep中默認采用tf.clip_by_global_norm。

  embedding_lr_multipliers

  embedding_feature_column到float的一個mapping。對指定的embedding feature column在計算梯度時乘以一個常數因子,調整梯度的變化速率。

  看完模型的構造函數后,我們大概知道wide和deep端的模型各對應什么樣的模型,模型需要輸入什么樣的參數。為了更深入了解模型,以下我們對wide and deep模型的相關代碼進行了分析,力求解決如下疑問: (1) 分別用于線性模型和DNN模型訓練的特征是如何定義的,其內部如何實現;(2) 訓練中線性模型和DNN模型如何進行聯合訓練,訓練誤差如何反饋給wide模型和deep模型?下面我們重點針對特征和模型訓練這兩方面進行解讀。

  特征

  wide and deep模型訓練一般是以多個訓練樣本作為1個批次(batch)進行訓練,訓練樣本在行維度上定義,每一行對應一個訓練樣本實例,包括特征(feature column),標注(label)以及權重(weight),如圖2。特征在列維度上定義,每個特征對應1個feature column,feature column由在列維度上的1個或者若干個張量(tensor)組成,tensor中的每個元素對應一個樣本在該feature column上某個維度的值。feature column的定義在可以在源代碼的feature_column.py文件中找到,對應類為_FeatureColumn,該類定義了基本接口,是wide and deep模型中所有特征類的抽象父類。

  TensorFlow模型介紹

  wide and deep模型中使用的特征包括兩大類: 一類是連續(xù)型特征,主要用于deep模型的訓練,包括real value類型的特征以及embedding類型的特征等;一類是離散型特征,主要用于wide模型的訓練,包括sparse類型的特征以及cross類型的特征等。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?
      主站蜘蛛池模板: 最近2018年中文字幕免费图片 | 黄 色 录像成 人播放免费99网 | 俄罗斯欧美色黄激情 | 噜噜噜 综合 亚洲 | 视频三区 | 久久夜色撩人精品国产 | xx综合网| 亚洲福利一区二区三区 | 欧美色图在线视频 | 唐人社电亚洲一区二区三区 | 国产美女主播一级成人毛片 | 台湾香港澳门三级在线 | 99久久99这里只有免费费精品 | 一区视频免费观看 | 在线免费观看一区二区三区 | 精品伊人久久大线蕉地址 | 午夜福免费福利在线观看 | 天天操夜夜爽 | 国产精品福利久久2020 | 婷婷丁香五 | 美女毛片视频 | 欧美一区二区三区免费看 | 天天操天天曰 | 午夜影院a| 高h细节肉爽文bl1v1 | 亚洲免费观看在线视频 | 色综合天天综合网国产人 | 老色批| 69国产成人精品午夜福中文 | 女人又色又爽又黄 | 亚洲精品美女久久久 | 美女黄色一级毛片 | 欧美成人午夜精品免费福利 | 天堂视频网| 一级看片| 黄视频免费网站 | 成人在线网站 | 包你爽综合网 | 超薄肉色丝袜精品足j福利 超黄视频在线观看 | 精品视频卡1卡2卡3 精品视频免费看 | 69日本xxxxxxxxx98|