0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在回歸模型或分類模型中創(chuàng)建嵌套

Tensorflowers ? 來源:未知 ? 作者:李倩 ? 2018-08-28 11:13 ? 次閱讀

如果您有一個稀疏分類變量(可以有多個可能的值的變量),將該變量嵌入到較低維度可能會非常有用。這種最廣為人知的嵌入形式就是詞嵌套(例如 word2vec 或 Glove 嵌套),即語言中的所有詞匯都用一個包含約 50 個元素的向量表示。其理念是相似的詞匯在 50 維空間中距離很近。您可以使用分類變量進行相同操作,即使用一個問題訓(xùn)練嵌套,然后再次使用該嵌套,而非對相關(guān)問題中的分類變量進行獨熱編碼。嵌套的較低維度空間是連續(xù)的,所以該嵌套還可以充當聚類算法的輸入 — 您可以找到分類變量的自然分組。

嵌套可以幫助您看到森林,而不僅僅是樹木

要提供使用估算器訓(xùn)練的嵌套,您可以連同普通預(yù)測輸出一起,發(fā)出分類變量的較低維度表征。嵌套權(quán)重保存在 SavedModel 中,并且有一個分享文件本身的選項?;蛘?,您也可以為機器學(xué)習(xí)團隊的客戶端按需提供嵌套,這些客戶端現(xiàn)在只是松散耦合到您選擇的模型架構(gòu),所以這樣可能更容易維護。每次有更新更好的版本替代您的模型時,客戶端都會獲得更新后的嵌套。

在本文中,我會向您展示如何:

在回歸模型或分類模型中創(chuàng)建嵌套

以不同方法表示分類變量

使用特征列進行數(shù)學(xué)計算

分發(fā)嵌套及原始模型的輸出

您可以在 GitHub 上找到本文中的完整代碼,其中包含更多上下文。在這里,我只向您展示關(guān)鍵代碼段。

用模型來預(yù)測自行車需求

我們來構(gòu)建一個簡單的需求預(yù)測模型,在已知星期幾和當天是否下雨的前期下,預(yù)測自行車租賃站的租車數(shù)量。所需數(shù)據(jù)來自紐約市自行車租賃和NOAA 氣象數(shù)據(jù)的公開數(shù)據(jù)集:

模型的輸入如下:

星期幾(1–7 的整數(shù))

租賃站 ID(由于不知道完整詞匯,這里我們使用哈希存儲分區(qū)。該數(shù)據(jù)集有大約 650 個唯一值。我們會使用一個很大的哈希存儲分區(qū),但之后會將其嵌入到較低維度中)

是否下雨(真/假)

我們想要預(yù)測的標簽為 num_trips。

我們可以通過在BigQuery中運行這個查詢來創(chuàng)建數(shù)據(jù)集,從而加入自行車和天氣數(shù)據(jù)集,并進行必要的聚合

注:BigQuery 鏈接

https://cloud.google.com/bigquery/

1#standardsql

2WITH bicycle_rentals AS (

3SELECT

4COUNT(starttime) as num_trips,

5EXTRACT(DATE from starttime) as trip_date,

6MAX(EXTRACT(DAYOFWEEK from starttime)) as day_of_week,

7start_station_id

8FROM `bigquery-public-data.new_york.citibike_trips`

9GROUP BY trip_date, start_station_id

10),

11

12rainy_days AS

13(

14SELECT

15date,

16(MAX(prcp) > 5) AS rainy

17FROM (

18SELECT

19 wx.date AS date,

20IF (wx.element = 'PRCP', wx.value/10, NULL) AS prcp

21FROM

22`bigquery-public-data.ghcn_d.ghcnd_2016` AS wx

23WHERE

24wx.id = 'USW00094728'

25)

26GROUP BY

27 date

28 )

29

30SELECT

31num_trips,

32day_of_week,

33start_station_id,

34rainy

35FROM bicycle_rentals AS bk

36JOIN rainy_days AS wx

37ON wx.date = bk.trip_date

使用估算器編寫模型

要編寫模型,我們需要在 TensorFlow 中使用自定義估算器。雖然這只是一個線性模型,但我們不能使用 LinearRegressor,因為 LinearRegressor 會隱藏所有底層特征列運算。我們需要訪問中間層輸出(嵌套特征列的輸出),這樣我們就可以清晰地編寫線性模型。

要使用自定義估算器,您需要編寫一個模型函數(shù),并將其傳遞給估算器構(gòu)造函數(shù):

1ef train_and_evaluate(output_dir, nsteps):

2estimator = tf.estimator.Estimator(

3model_fn = model_fn,

4model_dir = output_dir)

自定義估算器中的模型函數(shù)包括下列 5 個部分:

1.定義模型:

1def model_fn(features, labels, mode):

2# linear model

3station_col = tf.feature_column.categorical_column_with_hash_bucket('start_station_id', 5000, tf.int32)

4station_embed = tf.feature_column.embedding_column(station_col, 2) # embed dimension

5embed_layer = tf.feature_column.input_layer(features, station_embed) 6

7cat_cols = [

8tf.feature_column.categorical_column_with_identity('day_of_week', num_buckets = 8),

9tf.feature_column.categorical_column_with_vocabulary_list('rainy', ['false', 'true'])

10]

11cat_cols = [tf.feature_column.indicator_column(col) for col in cat_cols]

12other_inputs = tf.feature_column.input_layer(features, cat_cols)

13

14all_inputs = tf.concat([embed_layer, other_inputs], axis=1)

15predictions = tf.layers.dense(all_inputs, 1) # linear model

我們將選取租賃站列,并根據(jù)其哈希代碼將其放入一個存儲分區(qū)。使用這個技巧可以避免構(gòu)建完整詞匯。紐約只有大約 650 個自行車租賃站,所以擁有 5000 個哈希存儲分區(qū),我們就可以大大減少沖突的幾率。然后,將租賃站 ID 嵌入到少數(shù)維度中,我們還會了解到哪些租賃站彼此相似,至少在雨天租車的情況下相似。最后,用二維向量表示每個租賃站的 ID。數(shù)字 2 控制較低維度空間代表分類變量中信息的準確程度。這里我隨意選擇了 2,但實際上,我們需要調(diào)節(jié)此超參數(shù),以實現(xiàn)最佳性能。

其他兩個分類列均使用其實際詞匯創(chuàng)建,然后進行了獨熱編碼(指示器列對數(shù)據(jù)進行了獨熱編碼)。

這兩組輸入都經(jīng)過級聯(lián),以創(chuàng)建一個寬輸入層,然后通過一個輸出節(jié)點傳遞到某個密集層。這樣,您就在較低層級編寫了一個線性模型。這相當于編寫了一個 LinearRegressor,如下所示:

1station_embed =

2tf.feature_column.embedding_column(

tf.feature_column.categorical_column_with_hash_bucket('start_station_id', 5000, tf.int32), 2)

3feature_cols = [

4tf.feature_column.categorical_column_with_identity('day_of_week', num_buckets = 8),

5station_embed,

6tf.feature_column.categorical_column_with_vocabulary_list('rainy', ['false', 'true'])

7]

8estimator = tf.estimator.LinearRegressor(

9model_dir = output_dir,

10feature_columns = feature_cols)

請注意,LinearRegressor 會將 input_layer、indicator_column 等全部隱藏起來。但是,我想訪問租賃站的嵌套,所以將其顯示了出來。

2.使用回歸模塊設(shè)置估算器規(guī)范

對于回歸問題,我們可以使用 Ftrl 優(yōu)化器將均方誤差最小化( LinearRegressor 默認使用此優(yōu)化器,所以我也使用這個):

1my_head = tf.contrib.estimator.regression_head()

2spec = my_head.create_estimator_spec(

3features = features, mode = mode,

4labels = labels, logits = predictions,

5optimizer = tf.train.FtrlOptimizer(learning_rate = 0.1)

6)

3 — 4.創(chuàng)建輸出字典

通常情況下,我們只會發(fā)送預(yù)測,但在這個例子中,我們想回送預(yù)測和嵌套:

1# 3. Create predictions

2predictions_dict = {

3"predicted": predictions,

4"station_embed": embed_layer

5}

6

7# 4. Create export outputs

8export_outputs = {

9"predict_export_outputs": tf.estimator.export.PredictOutput(outputs = predictions_dict)

10}

這里,我們使用自定義估算器的另一個原因在于它能夠更改 export_outputs。

5.回送帶有預(yù)測結(jié)果的 EstimatorSpec,并導(dǎo)出替換過的輸出:

1# 5. Return EstimatorSpec

2return spec._replace(predictions = predictions_dict,

3export_outputs = export_outputs)

現(xiàn)在,我們照常訓(xùn)練模型。

調(diào)用預(yù)測

然后,可以使用TensorFlow Serving提供導(dǎo)出的模型,或者可以選擇將其部署到Cloud ML Engine(實際是托管的 TF Serving),隨后調(diào)用進行預(yù)測。您也可以使用gcloud調(diào)用本地模型(它可以針對此用途提供比saved_model_cli更方便的界面):

1EXPORTDIR=./model_trained/export/exporter/

2MODELDIR=$(ls $EXPORTDIR | tail -1)

3gcloud ml-engine local predict --model-dir=${EXPORTDIR}/${MODELDIR} --json-instances=./test.json

test.json 中有什么?

{“day_of_week”: 4, “start_station_id”: 435, “rainy”:“true”}

{“day_of_week”: 4, “start_station_id”: 521, “rainy”:“true”}

{“day_of_week”: 4, “start_station_id”: 3221, “rainy”:“true”}

{“day_of_week”: 4, “start_station_id”: 3237, “rainy”:“true”}

正如您看到的,我發(fā)送了 4 個實例,分別對應(yīng)租賃站 435、521、3221 和 3237。

前面兩個站位于曼哈頓,這一區(qū)域的租賃活動非常頻繁(既為通勤族也為游客提供租賃服務(wù))。后面兩個站位于長島,這個區(qū)域的自行車租賃并不普及(可能只在周末提供服務(wù))。產(chǎn)生的輸出包含預(yù)測的旅行數(shù)量(我們的標簽)和租賃站的嵌套:

在本例中,嵌套的第一個維度在全部情況下幾乎為零。所以,我們只需要一個維度嵌套。查看第二個維度,非常清楚地顯示曼哈頓站有正值 (0.0081, 0.0011),而長島站有負值 (-0.0025, -0.0031)。

這是我們單純通過機器學(xué)習(xí)模型得到的信息,僅考察這兩個地點在不同日期的自行車租賃情況!如果您的 TensorFlow 模型中有分類變量,可以試試從這些模型中分配嵌套。也許他們會帶來新的數(shù)據(jù)分析!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1201

    瀏覽量

    24622
  • 嵌套
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    7923

原文標題:如何提供使用估算器訓(xùn)練的嵌套?

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用CUBEAI部署tflite模型到STM32F0,模型創(chuàng)建失敗怎么解決?

    看到CUBE_AI已經(jīng)支持到STM32F0系列芯片,就想拿來入門嵌入式AI。 生成的模型很小,是可以部署到F0上的,但是一直無法創(chuàng)建成功。 查閱CUBE AI文檔說調(diào)用create函數(shù)前,要啟用
    發(fā)表于 03-15 08:10

    [求助]怎樣orcad創(chuàng)建元件模型

    怎樣orcad創(chuàng)建元件模型?最近要仿真一個電路,PSPICE找不到仿真
    發(fā)表于 03-25 09:17

    系統(tǒng)模型及其分類

    系統(tǒng)模型及其分類[hide][/hide]
    發(fā)表于 10-03 22:59

    Keras之ML~P:基于Keras建立的回歸預(yù)測的神經(jīng)網(wǎng)絡(luò)模型

    Keras之ML~P:基于Keras建立的回歸預(yù)測的神經(jīng)網(wǎng)絡(luò)模型(根據(jù)200個數(shù)據(jù)樣本預(yù)測新的5+1個樣本)——回歸預(yù)測
    發(fā)表于 12-20 10:43

    深度學(xué)習(xí)模型是如何創(chuàng)建的?

    嵌入式系統(tǒng)已被證明可以降低成本并增加各個行業(yè)的收入,包括制造工廠,供應(yīng)鏈管理,醫(yī)療保健等等。本文將介紹有關(guān)深度學(xué)習(xí)嵌入式系統(tǒng)的信息。深度學(xué)習(xí)模型是如何創(chuàng)建的?創(chuàng)建深度學(xué)習(xí)模型涉及多個階
    發(fā)表于 10-27 06:34

    Edge Impulse的回歸模型

    Edge Impulse的回歸模型可以從數(shù)據(jù)中學(xué)習(xí)模式,并將其應(yīng)用于新數(shù)據(jù)。 非常適合預(yù)測數(shù)字連續(xù)值。
    發(fā)表于 12-20 06:21

    Edge Impulse的分類模型淺析

    就Edge Impulse的三大模型之一的分類模型進行淺析。針對于圖像的分類識別模型,讀者可參考OpenMv
    發(fā)表于 12-20 06:51

    如何創(chuàng)建Proteus仿真模型

    我們緊接著介紹以原理圖方式創(chuàng)建Proteus仿真模型的詳細過程。有些讀者可能會想:不就是從器件庫調(diào)出元件創(chuàng)建嘛,我可以做一個超級器件,里面包含51、AVR、PIC等單片機器件構(gòu)成的超
    發(fā)表于 01-24 08:08

    使用KNN進行分類回歸

    奇數(shù)。與分類任務(wù)不同,回歸任務(wù),特征向量與實值標量而不是標簽相關(guān)聯(lián),KNN是通過對響應(yīng)變量均值加權(quán)均值來進行預(yù)測。惰性學(xué)習(xí)和非參數(shù)
    發(fā)表于 10-28 14:44

    回歸滯后模型進行多變量時間序列預(yù)測案例分享

    1、如何建立一個模型來進行多元時間序列預(yù)測呢?  下圖顯示了關(guān)于不同類型葡萄酒銷量的月度多元時間序列。每種葡萄酒類型都是時間序列的一個變量?! 〖僭O(shè)要預(yù)測其中一個變量。比如,sparkling
    發(fā)表于 11-30 15:33

    創(chuàng)建Proteus原理圖仿真模型

    創(chuàng)建6位D/A轉(zhuǎn)換器和TTL7458原理圖模型為例,論述創(chuàng)建Proteus原理圖仿真模型的思路與方法、模型存庫與從庫
    發(fā)表于 03-28 15:10 ?95次下載
    <b class='flag-5'>創(chuàng)建</b>Proteus原理圖仿真<b class='flag-5'>模型</b>

    基于Weierstrass逼近定理非線性回歸模型應(yīng)用

    基于Weierstrass逼近定理,闡釋了將一般非線性回歸模型近似為多項式模型來處理的數(shù)學(xué)原理,從而引入了把多元非線性回歸分析轉(zhuǎn)化為多元線性回歸
    發(fā)表于 01-12 09:59 ?0次下載

    掌握logistic regression模型,有必要先了解線性回歸模型和梯度下降法

    先回想一下線性回歸,線性回歸模型幫助我們用最簡單的線性方程實現(xiàn)了對數(shù)據(jù)的擬合,然而,這只能完成回歸任務(wù),無法完成分類任務(wù),那么 logist
    的頭像 發(fā)表于 06-04 11:31 ?7558次閱讀
    掌握logistic regression<b class='flag-5'>模型</b>,有必要先了解線性<b class='flag-5'>回歸</b><b class='flag-5'>模型</b>和梯度下降法

    集成模型的原理及創(chuàng)建集成模型的方法

    集成學(xué)習(xí)是功能強大的機器學(xué)習(xí)技術(shù)之一。集成學(xué)習(xí)通過使用多種機器學(xué)習(xí)模型來提高預(yù)測結(jié)果的可靠性和準確性。但是,使用多種機器學(xué)習(xí)模型如何使預(yù)測結(jié)果更準確?可以采用什么樣的技術(shù)創(chuàng)建整體學(xué)習(xí)模型
    的頭像 發(fā)表于 11-11 11:13 ?5298次閱讀

    改進VGG模型蘋果外觀識別分類的應(yīng)用

    改進VGG模型蘋果外觀識別分類的應(yīng)用
    發(fā)表于 07-02 14:52 ?30次下載