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

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

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

Estimator如何使您能夠輕松地在TensorFlow中構(gòu)建線性模型

Tensorflowers ? 來(lái)源:李倩 ? 2018-11-29 17:32 ? 次閱讀

Estimator提供了大量用于在 TensorFlow 中處理線性模型的工具(以及其他工具)。本文簡(jiǎn)要介紹了這些工具,并闡述了以下內(nèi)容:

什么是線性模型

為何要使用線性模型

Estimator 如何使您能夠輕松地在 TensorFlow 中構(gòu)建線性模型

如何使用 Estimator 將線性模型與深度學(xué)習(xí)相結(jié)合,從而汲取二者的優(yōu)勢(shì)

您可以閱讀這篇概述文章,判斷 Estimator 的線性模型工具是否對(duì)您有用。然后,閱讀Estimator 寬度學(xué)習(xí)和深度學(xué)習(xí)教程(https://github.com/tensorflow/models/tree/master/official/wide_deep),并放手一試。這篇概述文章使用了此教程中的代碼示例,但此教程更詳細(xì)地介紹了代碼。

對(duì)基本的機(jī)器學(xué)習(xí)概念以及Estimator有一定了解將有助于理解這篇概述文章。

什么是線性模型?

線性模型使用特征的單個(gè)加權(quán)和進(jìn)行預(yù)測(cè)。舉例來(lái)說(shuō),如果您有關(guān)于人口年齡、受教育年數(shù)和每周工作時(shí)長(zhǎng)的數(shù)據(jù),那么模型可以學(xué)習(xí)每個(gè)數(shù)值的權(quán)重,并通過加權(quán)和估算某個(gè)人的薪水。您還可以使用線性模型進(jìn)行分類。

一些線性模型會(huì)將加權(quán)和轉(zhuǎn)換為一種更便利的形式。例如,邏輯回歸將加權(quán)和代入邏輯函數(shù),以將輸出轉(zhuǎn)換為介于 0 和 1 之間的值。不過,每個(gè)輸入特征仍然只有一個(gè)權(quán)重。

為何要使用線性模型?

近期研究已證實(shí)具有多層的更復(fù)雜神經(jīng)網(wǎng)絡(luò)具有強(qiáng)大的功能,為何還要使用如此簡(jiǎn)單的模型?

線性模型:

與深度神經(jīng)網(wǎng)絡(luò)相比,訓(xùn)練速度快

可以在非常大的特征集上取得很好的效果

可以使用無(wú)需反復(fù)調(diào)整學(xué)習(xí)速率等因素的算法進(jìn)行訓(xùn)練

可以比神經(jīng)網(wǎng)絡(luò)更輕松地進(jìn)行解讀和調(diào)試。您可以檢查分配給每個(gè)特征的權(quán)重,確定哪些特征對(duì)預(yù)測(cè)結(jié)果的影響最大

為理解機(jī)器學(xué)習(xí)提供了一個(gè)很好的起點(diǎn)

有廣泛的行業(yè)應(yīng)用

Estimator 如何幫助您構(gòu)建線性模型?

您可以在 TensorFlow 中從頭開始構(gòu)建線性模型,而無(wú)需借助于特殊的 API。不過,Estimator 提供了一些工具,使您可以更輕松地構(gòu)建有效的大型線性模型。

特征列和轉(zhuǎn)換

設(shè)計(jì)線性模型的主要操作包括將原始數(shù)據(jù)轉(zhuǎn)換為合適的輸入特征。TensorFlow 使用FeatureColumn抽象類來(lái)實(shí)現(xiàn)此類轉(zhuǎn)換。

FeatureColumn表示數(shù)據(jù)中的單個(gè)特征。FeatureColumn可能表示 “height” 等數(shù)量,也可能表示 “eye_color” 等類別(值來(lái)自一組離散概率,如 {'blue','brown','green'})。

對(duì)于 “height” 等連續(xù)特征和 “eye_color” 等類別特征,數(shù)據(jù)中的單個(gè)值可能先轉(zhuǎn)換為數(shù)字序列,然后再輸入到模型中。盡管如此,您還是可以通過FeatureColumn抽象類將該特征視為單個(gè)語(yǔ)義單元進(jìn)行操作。您可以指定轉(zhuǎn)換并選擇要包括的特征,而無(wú)需處理饋送到模型的張量中的特定索引。

稀疏列

線性模型中的類別特征通常被轉(zhuǎn)換為稀疏向量,其中每個(gè)可能的值都具有對(duì)應(yīng)的索引或 ID。例如,如果只有 3 種可能的眼睛顏色,您可以將 “eye_color” 表示為長(zhǎng)度為 3 的向量:“brown” 為 [1, 0, 0],“blue” 為 [0, 1, 0],而 “green” 為 [0, 0, 1]。這些向量稱為 “稀疏” 向量,因?yàn)楫?dāng)可能值的集合非常大(例如包含所有英文單詞的集合)時(shí),它們可能很長(zhǎng),且包含很多零。

雖然您不需要通過類別列來(lái)使用 Estimator 提供的線性模型工具,但是線性模型的優(yōu)勢(shì)之一是它們能夠處理大型稀疏向量。稀疏特征是 Estimator 提供的線性模型工具的主要用例。

編碼稀疏列:FeatureColumn自動(dòng)將類別值轉(zhuǎn)換為向量,具體代碼如下所示:

eye_color = tf.feature_column.categorical_column_with_vocabulary_list( "eye_color", vocabulary_list=["blue", "brown", "green"])

其中eye_color是源數(shù)據(jù)中的一列的名稱。

您還可以為類別特征(您不知道此類特征的所有可能值)生成FeatureColumn。對(duì)于這種情況,您將使用categorical_column_with_hash_bucket(),它使用哈希函數(shù)為特征值分配索引。

education = tf.feature_column.categorical_column_with_hash_bucket( "education", hash_bucket_size=1000)

特征組合:由于線性模型為不同的特征分配獨(dú)立權(quán)重,因此它們無(wú)法了解特定特征值組合的相對(duì)重要性。如果您有 “favorite_sport” 和 “home_city” 這兩個(gè)特征,并且您嘗試預(yù)測(cè)某人是否喜歡穿紅色,此時(shí)線性模型將無(wú)法判斷來(lái)自圣路易斯的棒球迷是否特別喜歡穿紅色。

您可以通過創(chuàng)建新特征 “favorite_sport_x_home_city” 突破這個(gè)限制。對(duì)于給定用戶,此特征的值只是兩個(gè)源特征的值相連:例如 “baseball_x_stlouis”。這種組合特征稱為特征組合。

使用crossed_column()方法可輕松設(shè)置特征組合:

sport_x_city = tf.feature_column.crossed_column( ["sport", "city"], hash_bucket_size=int(1e4))

連續(xù)列

您可以如下所示地指定連續(xù)特征:

age = tf.feature_column.numeric_column("age")

雖然作為單個(gè)實(shí)數(shù)的連續(xù)特征通??梢灾苯虞斎氲侥P椭?,但是 TensorFlow 也為此類列提供了有用的轉(zhuǎn)換。

分桶:分桶可將連續(xù)列轉(zhuǎn)換為類別列。此轉(zhuǎn)換使您能夠在特征組合中使用連續(xù)特征,或?qū)W習(xí)特定值范圍特別重要的情況。

分桶將可能的值范圍劃分為子范圍(稱為分桶):

age_buckets = tf.feature_column.bucketized_column( age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])

值所在的分桶便是該值的類別標(biāo)簽。

輸入函數(shù)

FeatureColumn為模型提供輸入數(shù)據(jù)規(guī)范,指示如何表示和轉(zhuǎn)換數(shù)據(jù)。但它們本身不提供數(shù)據(jù)。您需要通過輸入函數(shù)提供數(shù)據(jù)。

輸入函數(shù)必須返回一個(gè)張量字典。每個(gè)鍵對(duì)應(yīng)一個(gè)FeatureColumn的名稱。每個(gè)鍵的值都是一個(gè)張量,其中包含該特征針對(duì)所有數(shù)據(jù)實(shí)例的值。請(qǐng)參閱預(yù)創(chuàng)建的 Estimator,詳細(xì)了解輸入函數(shù);另請(qǐng)參閱寬度學(xué)習(xí)和深度學(xué)習(xí)教程中的input_fn,查看輸入函數(shù)的示例實(shí)現(xiàn)。

輸入函數(shù)會(huì)傳遞給train()和evaluate()調(diào)用(用于啟動(dòng)訓(xùn)練和測(cè)試操作),如下一部分中所述。

線性 Estimator

TensorFlow Estimator 類為回歸模型和分類模型提供統(tǒng)一的訓(xùn)練和評(píng)估工具。它們負(fù)責(zé)訓(xùn)練和評(píng)估循環(huán)的細(xì)節(jié)部分,使用戶可以專注于模型輸入和架構(gòu)。

要構(gòu)建線性 Estimator,您可以使用tf.estimator.LinearClassifierEstimator 或tf.estimator.LinearRegressorEstimator

(分別用于分類和回歸)。

與所有 TensorFlow Estimator 一樣,要運(yùn)行 Estimator,只需執(zhí)行以下操作即可:

實(shí)例化 Estimator 類。對(duì)于兩個(gè)線性 Estimator 類,將FeatureColumn列表傳遞給構(gòu)造函數(shù)

調(diào)用 Estimator 的train()方法以對(duì)其進(jìn)行訓(xùn)練

調(diào)用 Estimator 的evaluate()方法以查看其效果

例如:

e = tf.estimator.LinearClassifier( feature_columns=[ native_country, education, occupation, workclass, marital_status, race, age_buckets, education_x_occupation, age_buckets_x_race_x_occupation], model_dir=YOUR_MODEL_DIRECTORY)e.train(input_fn=input_fn_train, steps=200)# Evaluate for one step (one pass through the test data).results = e.evaluate(input_fn=input_fn_test)# Print the stats for the evaluation.for key in sorted(results): print("%s: %s" % (key, results[key]))

寬度學(xué)習(xí)和深度學(xué)習(xí)

tf.estimator模塊還提供一個(gè) Estimator 類,使您能夠一同訓(xùn)練線性模型和深度神經(jīng)網(wǎng)絡(luò)。這種新方法結(jié)合了線性模型 “記憶” 關(guān)鍵特征的能力以及神經(jīng)網(wǎng)絡(luò)的泛化能力。請(qǐng)使用tf.estimator.DNNLinearCombinedClassifier創(chuàng)建這種 “寬度學(xué)習(xí)和深度學(xué)習(xí)” 模型:

e = tf.estimator.DNNLinearCombinedClassifier( model_dir=YOUR_MODEL_DIR, linear_feature_columns=wide_columns, dnn_feature_columns=deep_columns, dnn_hidden_units=[100, 50])

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

    關(guān)注

    0

    文章

    9

    瀏覽量

    7797
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    328

    瀏覽量

    60474

原文標(biāo)題:帶你輕松使用 TensorFlow 創(chuàng)建大型線性模型

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用TensorFlow構(gòu)建機(jī)器學(xué)習(xí)模型

    在這篇文章,我將逐步講解如何使用 TensorFlow 創(chuàng)建一個(gè)簡(jiǎn)單的機(jī)器學(xué)習(xí)模型。
    的頭像 發(fā)表于 01-08 09:25 ?895次閱讀
    如何使用<b class='flag-5'>TensorFlow</b><b class='flag-5'>構(gòu)建</b>機(jī)器學(xué)習(xí)<b class='flag-5'>模型</b>

    TensorFlow是什么

    TensorFlow 深度學(xué)習(xí)模型的應(yīng)用,使讀者可以輕松地將
    發(fā)表于 07-22 10:14

    TensorFlow XLA加速線性代數(shù)編譯器

    版本。用時(shí)需要從源代碼構(gòu)建它。從源代碼構(gòu)建 TensorFlow,需要 TensorFlow 版的 LLVM 和 Bazel。
    發(fā)表于 07-28 14:31

    淺談深度學(xué)習(xí)之TensorFlow

    模型取得讓人滿意的精度,就可以部署在生產(chǎn)環(huán)境中了。拓展閱讀在 TensorFlow 1.3 ,增加了一個(gè)名為 TensorFlow Estimat
    發(fā)表于 07-28 14:34

    TensorFlow實(shí)現(xiàn)簡(jiǎn)單線性回歸

    本小節(jié)直接從 TensorFlow contrib 數(shù)據(jù)集加載數(shù)據(jù)。使用隨機(jī)梯度下降優(yōu)化器優(yōu)化單個(gè)訓(xùn)練樣本的系數(shù)。實(shí)現(xiàn)簡(jiǎn)單線性回歸的具體做法導(dǎo)入需要的所有軟件包: 神經(jīng)網(wǎng)絡(luò),所有的
    發(fā)表于 08-11 19:34

    TensorFlow實(shí)現(xiàn)多元線性回歸(超詳細(xì))

    TensorFlow 實(shí)現(xiàn)簡(jiǎn)單線性回歸的基礎(chǔ)上,可通過權(quán)重和占位符的聲明稍作修改來(lái)對(duì)相同的數(shù)據(jù)進(jìn)行多元
    發(fā)表于 08-11 19:35

    高階API構(gòu)建模型和數(shù)據(jù)集使用

    能擬合或逼近現(xiàn)實(shí)世界事物或現(xiàn)象的數(shù)學(xué)模型,故樣本數(shù)據(jù)大,可以覆蓋事物或現(xiàn)象所有特征時(shí),可以越準(zhǔn)確的識(shí)別事物,這也是大數(shù)據(jù)時(shí)代,數(shù)據(jù)是燃料的觀點(diǎn)。TensorFlow是一個(gè)神經(jīng)網(wǎng)絡(luò)軟件框架,通過
    發(fā)表于 11-04 07:49

    如何使用pycoral、tensorflow-lite和edgetpu構(gòu)建核心最小圖像?

    如果您能告訴我們?nèi)绾问褂?pycoral、tensorflow-lite 和 edgetpu 構(gòu)建核心最小圖像,我們將不勝感激。
    發(fā)表于 06-05 10:53

    TensorFlow模型詳解與應(yīng)用

    通用的模型訓(xùn)練以及評(píng)測(cè)的函數(shù)接口 (train_model, evaluate_model, infer_model),Estimator 類中用一個(gè)統(tǒng)一函數(shù) call_model_fn 來(lái)實(shí)現(xiàn)
    發(fā)表于 09-28 14:28 ?0次下載
    <b class='flag-5'>TensorFlow</b><b class='flag-5'>模型</b>詳解與應(yīng)用

    序列 SAR ADC 使您能夠 PSoC 4 上配置和使用不同操作模式的 SAR ADC

    序列 SAR ADC 使您能夠 PSoC 4 上配置和使用不同操作模式的 SAR ADC
    發(fā)表于 10-10 08:30 ?17次下載
    序列 SAR ADC <b class='flag-5'>使</b><b class='flag-5'>您能夠</b><b class='flag-5'>在</b> PSoC 4 上配置和使用不同操作模式的 SAR ADC

    利用TensorFlow.js,D3.js 和 Web 的力量使訓(xùn)練模型的過程可視化

    TensorFlow.js 將機(jī)器學(xué)習(xí)引入 JavaScript 和 Web。 我們將利用這個(gè)很棒的框架來(lái)構(gòu)建一個(gè)深度神經(jīng)網(wǎng)絡(luò)模型。這個(gè)模型能夠
    的頭像 發(fā)表于 08-08 14:24 ?6942次閱讀

    如何使用顯式核方法改進(jìn)線性模型

    本文使用 tf.contrib.learn(TensorFlow 的高階機(jī)器學(xué)習(xí) API)Estimator 構(gòu)建我們的機(jī)器學(xué)習(xí)模型。如果您不熟悉此 API,不妨通過
    的頭像 發(fā)表于 12-02 11:11 ?2000次閱讀
    如何使用顯式核方法改進(jìn)<b class='flag-5'>線性</b><b class='flag-5'>模型</b>

    如何在TensorFlow構(gòu)建并訓(xùn)練CNN模型

    TensorFlow構(gòu)建并訓(xùn)練一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型是一個(gè)涉及多個(gè)步驟的過程,包括數(shù)據(jù)預(yù)處理、
    的頭像 發(fā)表于 07-04 11:47 ?688次閱讀

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 Keras和TensorFlow簡(jiǎn)介 Keras是一個(gè)高級(jí)神經(jīng)網(wǎng)絡(luò)API,它提供了一種簡(jiǎn)單、快
    的頭像 發(fā)表于 07-05 09:36 ?437次閱讀

    tensorflow簡(jiǎn)單的模型訓(xùn)練

    本文中,我們將詳細(xì)介紹如何使用TensorFlow進(jìn)行簡(jiǎn)單的模型訓(xùn)練。TensorFlow是一個(gè)開源的機(jī)器學(xué)習(xí)庫(kù),廣泛用于各種機(jī)器學(xué)習(xí)任務(wù),包括圖像識(shí)別、自然語(yǔ)言處理等。我們將從安裝
    的頭像 發(fā)表于 07-05 09:38 ?472次閱讀