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

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

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

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

Tensorflowers ? 來源:陳翠 ? 2018-12-02 11:11 ? 次閱讀

本文使用tf.contrib.learn(TensorFlow 的高階機器學(xué)習(xí) API)Estimator 構(gòu)建我們的機器學(xué)習(xí)模型。如果您不熟悉此 API,不妨通過Estimator 指南著手了解。我們將使用 MNIST 數(shù)據(jù)集。本文包含以下步驟:

加載和準(zhǔn)備 MNIST 數(shù)據(jù),以用于分類

構(gòu)建一個簡單的線性模型,訓(xùn)練該模型,并用評估數(shù)據(jù)對其進(jìn)行評估

將線性模型替換為核化線性模型,重新訓(xùn)練它,并重新進(jìn)行評估

加載和準(zhǔn)備用于分類的 MNIST 數(shù)據(jù)

運行以下實用程序命令,以加載 MNIST 數(shù)據(jù)集:

data = tf.contrib.learn.datasets.mnist.load_mnist()

上述方法會加載整個 MNIST 數(shù)據(jù)集(包含 7 萬個樣本),然后將數(shù)據(jù)集拆分為訓(xùn)練數(shù)據(jù)(5.5 萬)、驗證數(shù)據(jù)(5 千)和測試數(shù)據(jù)(1 萬)。拆分的每個數(shù)據(jù)集均包含一個圖像 NumPy 數(shù)組(形狀為 [sample_size, 784])以及一個標(biāo)簽 NumPy 數(shù)組(形狀為 [sample_size, 1])。在本文中,我們僅分別使用訓(xùn)練數(shù)據(jù)和驗證數(shù)據(jù)訓(xùn)練和評估模型。

要將數(shù)據(jù)饋送到tf.contrib.learn Estimator,將數(shù)據(jù)轉(zhuǎn)換為張量會很有幫助。為此,我們將使用input function 將操作添加到 TensorFlow 圖,該圖在執(zhí)行時會創(chuàng)建要在下游使用的小批次張量。有關(guān)輸入函數(shù)的更多背景知識,請參閱輸入函數(shù)這一部分(https://tensorflow.google.cn/guide/premade_estimators?hl=zh-CN#create_input_functions)。在本示例中,我們不僅會將 NumPy 數(shù)組轉(zhuǎn)換為張量,還將使用tf.train.shuffle_batch操作指定 batch_size 以及是否在每次執(zhí)行 input_fn 操作時都對輸入進(jìn)行隨機化處理(在訓(xùn)練期間,隨機化處理通常會加快收斂速度)。以下代碼段是加載和準(zhǔn)備數(shù)據(jù)的完整代碼。在本示例中,我們使用大小為 256 的小批次數(shù)據(jù)集進(jìn)行訓(xùn)練,并使用整個樣本(5 千個條目)進(jìn)行評估。您可以隨意嘗試不同的批次大小。

import numpy as npimport tensorflow as tfdef get_input_fn(dataset_split, batch_size, capacity=10000, min_after_dequeue=3000): def _input_fn(): images_batch, labels_batch = tf.train.shuffle_batch( tensors=[dataset_split.images, dataset_split.labels.astype(np.int32)], batch_size=batch_size, capacity=capacity, min_after_dequeue=min_after_dequeue, enqueue_many=True, num_threads=4) features_map = {'images': images_batch} return features_map, labels_batch return _input_fndata = tf.contrib.learn.datasets.mnist.load_mnist()train_input_fn = get_input_fn(data.train, batch_size=256)eval_input_fn = get_input_fn(data.validation, batch_size=5000)

訓(xùn)練一個簡單的線性模型

現(xiàn)在,我們可以使用 MNIST 數(shù)據(jù)集訓(xùn)練一個線性模型。我們將使用tf.contrib.learn.LinearClassifierEstimator,并用 10 個類別表示 10 個數(shù)字。輸入特征會形成一個 784 維密集向量,指定方式如下:

image_column = tf.contrib.layers.real_valued_column('images', dimension=784)

用于構(gòu)建、訓(xùn)練和評估 LinearClassifier Estimator 的完整代碼如下所示:

import time# Specify the feature(s) to be used by the estimator.image_column = tf.contrib.layers.real_valued_column('images', dimension=784)estimator = tf.contrib.learn.LinearClassifier(feature_columns=[image_column], n_classes=10)# Train.start = time.time()estimator.fit(input_fn=train_input_fn, steps=2000)end = time.time()print('Elapsed time: {} seconds'.format(end - start))# Evaluate and report metrics.eval_metrics = estimator.evaluate(input_fn=eval_input_fn, steps=1)print(eval_metrics)

下表總結(jié)了使用評估數(shù)據(jù)評估的結(jié)果。

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

注意:指標(biāo)會因各種因素而異。

除了調(diào)整(訓(xùn)練)批次大小和訓(xùn)練步數(shù)之外,您還可以微調(diào)一些其他參數(shù)。例如,您可以更改用于最小化損失的優(yōu)化方法,只需明確從可用優(yōu)化器集合中選擇其他優(yōu)化器即可。例如,以下代碼構(gòu)建的 LinearClassifier Estimator 使用了 Follow-The-Regularized-Leader (FTRL) 優(yōu)化策略,并采用特定的學(xué)習(xí)速率和 L2 正則化。

optimizer = tf.train.FtrlOptimizer(learning_rate=5.0, l2_regularization_strength=1.0)estimator = tf.contrib.learn.LinearClassifier( feature_columns=[image_column], n_classes=10, optimizer=optimizer)

無論參數(shù)的值如何,線性模型可在此數(shù)據(jù)集上實現(xiàn)的準(zhǔn)確率上限約為93%。

結(jié)合使用顯式核映射和線性模型

線性模型在 MNIST 數(shù)據(jù)集上的錯誤率相對較高(約 7%)表明輸入數(shù)據(jù)不是可線性分隔的。我們將使用顯式核映射減少分類錯誤。

直覺:大概的原理是,使用非線性映射將輸入空間轉(zhuǎn)換為其他特征空間(可能是更高維度的空間,其中轉(zhuǎn)換的特征幾乎是可線性分隔的),然后對映射的特征應(yīng)用線性模型。如下圖所示:

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

技術(shù)詳情

在本示例中,我們將使用 Rahimi 和 Recht 所著的論文 “Random Features for Large-Scale Kernel Machines”(大型核機器的隨機特征)中介紹的隨機傅里葉特征來映射輸入數(shù)據(jù)。隨機傅里葉特征通過以下映射將向量x∈Rd 映射到x′∈RD

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

其中,Ω∈RD×d、x∈Rd,b∈RD和余弦值會應(yīng)用到元素級別。

在本示例中,Ω和b條目是從分布中采樣的,使映射符合以下特性:

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

上述表達(dá)式右側(cè)的量也稱為 RBF(或高斯)核函數(shù)。此函數(shù)是機器學(xué)習(xí)中使用最廣泛的核函數(shù)之一,可隱式衡量比原始空間維度高得多的其他空間中的相似性。要了解詳情,請參閱徑向基函數(shù)核(https://en.wikipedia.org/wiki/Radial_basis_function_kernel)。

核分類器

tf.contrib.kernel_methods.KernelLinearClassifier是預(yù)封裝的tf.contrib.learnEstimator,集顯式核映射和線性模型的強大功能于一身。其構(gòu)造函數(shù)與 LinearClassifier Estimator 的構(gòu)造函數(shù)幾乎完全相同,但前者還可以指定要應(yīng)用到分類器使用的每個特征的一系列顯式核映射。以下代碼段演示了如何將 LinearClassifier 替換為 KernelLinearClassifier。

# Specify the feature(s) to be used by the estimator. This is identical to the# code used for the LinearClassifier.image_column = tf.contrib.layers.real_valued_column('images', dimension=784)optimizer = tf.train.FtrlOptimizer( learning_rate=50.0, l2_regularization_strength=0.001)kernel_mapper = tf.contrib.kernel_methods.RandomFourierFeatureMapper( input_dim=784, output_dim=2000, stddev=5.0, name='rffm')kernel_mappers = {image_column: [kernel_mapper]}estimator = tf.contrib.kernel_methods.KernelLinearClassifier( n_classes=10, optimizer=optimizer, kernel_mappers=kernel_mappers)# Train.start = time.time()estimator.fit(input_fn=train_input_fn, steps=2000)end = time.time()print('Elapsed time: {} seconds'.format(end - start))# Evaluate and report metrics.eval_metrics = estimator.evaluate(input_fn=eval_input_fn, steps=1)print(eval_metrics)

傳遞到KernelLinearClassifier的唯一額外參數(shù)是一個字典,表示從 feature_columns 到要應(yīng)用到相應(yīng)特征列的核映射列表的映射。以下行指示分類器先使用隨機傅里葉特征將初始的 784 維圖像映射到 2000 維向量,然后在轉(zhuǎn)換的向量上應(yīng)用線性模型:

kernel_mapper = tf.contrib.kernel_methods.RandomFourierFeatureMapper( input_dim=784, output_dim=2000, stddev=5.0, name='rffm')kernel_mappers = {image_column: [kernel_mapper]}estimator = tf.contrib.kernel_methods.KernelLinearClassifier( n_classes=10, optimizer=optimizer, kernel_mappers=kernel_mappers)

請注意stddev參數(shù)。它是近似 RBF 核的標(biāo)準(zhǔn)偏差 (σ),可以控制用于分類的相似性指標(biāo)。stddev通常通過微調(diào)超參數(shù)確定。

下表總結(jié)了運行上述代碼的結(jié)果。我們可以通過增加映射的輸出維度以及微調(diào)標(biāo)準(zhǔn)偏差,進(jìn)一步提高準(zhǔn)確率。

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

標(biāo)準(zhǔn)偏差

分類質(zhì)量與標(biāo)準(zhǔn)偏差的值密切相關(guān)。下表顯示了分類器在具有不同標(biāo)準(zhǔn)偏差值的評估數(shù)據(jù)上達(dá)到的準(zhǔn)確率。最優(yōu)值為標(biāo)準(zhǔn)偏差 = 5.0。注意標(biāo)準(zhǔn)偏差值過小或過大會如何顯著降低分類的準(zhǔn)確率。

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

輸出維度

直觀地來講,映射的輸出維度越大,兩個映射向量的內(nèi)積越逼近核,這通常意味著分類準(zhǔn)確率越高。換一種思路就是,輸出維度等于線性模型的權(quán)重數(shù);此維度越大,模型的 “自由度” 就越高。不過,超過特定閾值后,輸出維度的增加只能讓準(zhǔn)確率獲得極少的提升,但卻會導(dǎo)致訓(xùn)練時間更長。下面的兩個圖表展示了這一情況,分別顯示了評估準(zhǔn)確率與輸出維度和訓(xùn)練時間之間的函數(shù)關(guān)系。

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

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

總結(jié)

顯式核映射結(jié)合了非線性模型的預(yù)測能力和線性模型的可擴展性。與傳統(tǒng)的雙核方法不同,顯式核方法可以擴展到數(shù)百萬或數(shù)億個樣本。使用顯式核映射時,請注意以下提示:

隨機傅立葉特征對具有密集特征的數(shù)據(jù)集尤其有效

核映射的參數(shù)通常取決于數(shù)據(jù)。模型質(zhì)量與這些參數(shù)密切相關(guān)。通過微調(diào)超參數(shù)可找到最優(yōu)值

如果您有多個數(shù)值特征,不妨將它們合并成一個多維特征,然后向合并后的向量應(yīng)用核映射

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

    關(guān)注

    0

    文章

    9

    瀏覽量

    7797

原文標(biāo)題:如何使用顯式核方法改進(jìn)線性模型

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

收藏 人收藏

    評論

    相關(guān)推薦

    基于GAC模型實現(xiàn)交互圖像分割的改進(jìn)算法

    基于GAC模型實現(xiàn)交互圖像分割的改進(jìn)算法提出了一種改進(jìn)的交互圖像分割算法。采用全變分去噪模型
    發(fā)表于 09-19 09:19

    線性模型和非線性模型的區(qū)別是什么

    線性模型和非線性模型的區(qū)別,以及激活函數(shù)的作用
    發(fā)表于 06-05 12:08

    介紹支持向量機與決策樹集成等模型的應(yīng)用

    本文主要介紹支持向量機、k近鄰、樸素貝葉斯分類 、決策樹、決策樹集成等模型的應(yīng)用。講解了支持向量機SVM線性與非線性模型的適用環(huán)境,并對
    發(fā)表于 09-01 06:57

    一種基于改進(jìn)線性規(guī)劃的LDPC碼混合譯碼算法

    一種基于改進(jìn)線性規(guī)劃的LDPC碼混合譯碼算法_陳紫強
    發(fā)表于 01-07 16:52 ?0次下載

    基于改進(jìn)單相dq變換與形態(tài)濾波的電壓暫降檢測方法_金

    基于改進(jìn)單相dq變換與形態(tài)濾波的電壓暫降檢測方法_金
    發(fā)表于 01-08 11:37 ?5次下載

    基于ARMLinux 臺的模型預(yù)測控制算法實現(xiàn)

    基于ARMLinux 臺的模型預(yù)測控制算法實現(xiàn)
    發(fā)表于 09-25 08:48 ?16次下載
    基于ARMLinux 臺的<b class='flag-5'>顯</b><b class='flag-5'>式</b><b class='flag-5'>模型</b>預(yù)測控制算法實現(xiàn)

    八代酷睿的尷尬,遭遇研發(fā)瓶頸

    八代酷睿從HD系列更名為UHD系列,官方聲稱UHD系列的主要改變在于支持硬件編解碼10bit 4K HEVC視頻(或解碼VP9),而本質(zhì)上與上代HD6XX
    發(fā)表于 11-01 16:39 ?3470次閱讀

    一種改進(jìn)的非線性亮度提升模型的逆光圖像恢復(fù)手段

    針對因為拍照時光線不足或拍攝角度不佳而拍出逆光圖像影響肉眼觀察或計算機識別的問題,提出一種改進(jìn)的非線性亮度提升模型的逆光圖像恢復(fù)手段。已有的非線性亮度提升
    發(fā)表于 12-06 16:45 ?1次下載
    一種<b class='flag-5'>改進(jìn)</b>的非<b class='flag-5'>線性</b>亮度提升<b class='flag-5'>模型</b>的逆光圖像恢復(fù)手段

    應(yīng)該如何選擇使用獨有什么切換策略嗎?

     獨內(nèi)部也有一個官方的程序清單,建議哪些程序用獨(高性能),哪些程序用(省電)
    發(fā)表于 08-19 17:31 ?0次下載
    應(yīng)該如何選擇使用獨<b class='flag-5'>顯</b>和<b class='flag-5'>核</b><b class='flag-5'>顯</b>有什么切換策略嗎?

    cpu帶和不帶的區(qū)別

    CPU帶表示處理器中集成了核心顯卡,可以在無獨立顯卡的情況下顯示畫面。相反,不帶的CPU則需要額外配備獨立顯卡才能正常顯示畫面。同一芯片的處理器帶
    發(fā)表于 05-12 16:18 ?3.6w次閱讀

    基于反饋的改進(jìn)協(xié)同過濾算法研究

    基于反饋的協(xié)同過濾算法只存在3個變量,其相似度計算方法依賴用戶評分?jǐn)?shù)據(jù)的反饋行為,而未考慮現(xiàn)實推薦場景中存在的隱性因素影響,這決定了
    發(fā)表于 04-28 11:30 ?3次下載
    基于<b class='flag-5'>顯</b><b class='flag-5'>式</b>反饋的<b class='flag-5'>改進(jìn)</b>協(xié)同過濾算法研究

    結(jié)合和隱特征交互的融合模型

    特征工程是影響杋器茡習(xí)算法性能的關(guān)鍵因素之一,隨著互聯(lián)網(wǎng)數(shù)據(jù)規(guī)模的擴大,傳統(tǒng)特征工程的人力成本不斷増加。為減少對特征工程的依賴,構(gòu)建一種結(jié)合和隱特征交互的融合模型。將稀疏結(jié)構(gòu)單元
    發(fā)表于 05-12 16:13 ?5次下載

    基于除法畸變模型的鏡頭線性標(biāo)定方法

    針對魚眼鏡頭的高精度標(biāo)定需求,提岀一種基于除法畸變模型線性標(biāo)定方法。通過除法模型將題轉(zhuǎn)換為線性方程組求解問題相機畸變中心后對畸變方程矩陣進(jìn)
    發(fā)表于 05-19 11:39 ?7次下載

    面向非線性動態(tài)的保精度-稀疏特性回歸模型

    面向非線性動態(tài)的保精度-稀疏特性回歸模型
    發(fā)表于 07-02 15:00 ?3次下載

    什么是方法?

    方法是機器學(xué)習(xí)中的一類算法,它使用函數(shù)將數(shù)據(jù)映射到高維特征空間,然后在該特征空間中執(zhí)行線性或非線性分類/回歸。
    的頭像 發(fā)表于 03-31 10:49 ?1434次閱讀