欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在PyTorch中使用標簽平滑正則化的問題

 更新時間:2020年04月03日 10:59:23   作者:deephub  
這篇文章主要介紹了如何在PyTorch中使用標簽平滑正則化的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

什么是標簽平滑?在PyTorch中如何去使用它?

在訓練深度學習模型的過程中,過擬合和概率校準(probability calibration)是兩個常見的問題。一方面,正則化技術可以解決過擬合問題,其中較為常見的方法有將權重調小,迭代提前停止以及丟棄一些權重等。另一方面,Platt標度法和isotonic regression法能夠對模型進行校準。但是有沒有一種方法可以同時解決過擬合和模型過度自信呢?

標簽平滑也許可以。它是一種去改變目標變量的正則化技術,能使模型的預測結果不再僅為一個確定值。標簽平滑之所以被看作是一種正則化技術,是因為它可以防止輸入到softmax函數(shù)的最大logits值變得特別大,從而使得分類模型變得更加準確。

在這篇文章中,我們定義了標簽平滑化,在測試過程中我們將它應用到交叉熵損失函數(shù)中。

標簽平滑?

假設這里有一個多分類問題,在這個問題中,目標變量通常是一個one-hot向量,即當處于正確分類時結果為1,否則結果是0。

標簽平滑改變了目標向量的最小值,使它為ε。因此,當模型進行分類時,其結果不再僅是1或0,而是我們所要求的1-ε和ε,從而帶標簽平滑的交叉熵損失函數(shù)為如下公式。

在這個公式中,ce(x)表示x的標準交叉熵損失函數(shù),例如:-log(p(x)),ε是一個非常小的正數(shù),i表示對應的正確分類,N為所有分類的數(shù)量。

直觀上看,標記平滑限制了正確類的logit值,并使得它更接近于其他類的logit值。從而在一定程度上,它被當作為一種正則化技術和一種對抗模型過度自信的方法。

PyTorch中的使用

在PyTorch中,帶標簽平滑的交叉熵損失函數(shù)實現(xiàn)起來非常簡單。首先,讓我們使用一個輔助函數(shù)來計算兩個值之間的線性組合。

deflinear_combination(x, y, epsilon):return epsilon*x + (1-epsilon)*y

下一步,我們使用PyTorch中一個全新的損失函數(shù):nn.Module.

import torch.nn.functional as F
defreduce_loss(loss, reduction='mean'):return loss.mean() if reduction=='mean'else loss.sum() if reduction=='sum'else loss
classLabelSmoothingCrossEntropy(nn.Module):def__init__(self, epsilon:float=0.1, reduction='mean'):
    super().__init__()
    self.epsilon = epsilon
    self.reduction = reduction

  defforward(self, preds, target):
    n = preds.size()[-1]
    log_preds = F.log_softmax(preds, dim=-1)
    loss = reduce_loss(-log_preds.sum(dim=-1), self.reduction)
    nll = F.nll_loss(log_preds, target, reduction=self.reduction)
    return linear_combination(loss/n, nll, self.epsilon)

我們現(xiàn)在可以在代碼中刪除這個類。對于這個例子,我們使用標準的fast.ai pets example.

from fastai.vision import *
from fastai.metrics import error_rate
# prepare the data
path = untar_data(URLs.PETS)
path_img = path/'images'
fnames = get_image_files(path_img)
bs = 64
np.random.seed(2)
pat = r'/([^/]+)_\d+.jpg$'
data = ImageDataBunch.from_name_re(path_img, fnames, pat, ds_tfms=get_transforms(), size=224, bs=bs) \
           .normalize(imagenet_stats)
# train the model
learn = cnn_learner(data, models.resnet34, metrics=error_rate)
learn.loss_func = LabelSmoothingCrossEntropy()
learn.fit_one_cycle(4)

最后將數(shù)據(jù)轉換成模型可以使用的格式,選擇ResNet架構并以帶標簽平滑的交叉熵損失函數(shù)作為優(yōu)化目標。經(jīng)過四輪循環(huán)后,其結果如下

我們所得結果的錯誤率僅為7.5%,這對于10行左右的代碼來說是完全可以接受的,并且在模型中大多數(shù)參數(shù)還都選擇的是默認設置。

因此,在模型中還有許多參數(shù)可以進行調整,從而使得模型的表現(xiàn)性能更好,例如:可以使用不同的優(yōu)化器、超參數(shù)、模型架構等。

結論

在這篇文章中,我們了解了什么是標簽平滑以及什么時候去使用它,并且我們還知道了如何在PyTorch中實現(xiàn)它。之后,我們訓練了一個先進的計算機視覺模型,僅使用十行代碼就識別出了不同品種的貓和狗。

模型正則化和模型校準是兩個重要的概念。若想成為一個深度學習的資深玩家,就應該好好地去理解這些能夠對抗過擬合和模型過度自信的工具。

作者簡介: Dimitris Poulopoulos,是BigDataStack的一名機器學習研究員,同時也是希臘Piraeus大學的博士。曾為歐盟委員會、歐盟統(tǒng)計局、國際貨幣基金組織、歐洲央行等客戶設計過與AI相關的軟件。

總結

到此這篇關于如何在PyTorch中使用標簽平滑正則化的文章就介紹到這了,更多相關PyTorch正則化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python連接手機自動搜集螞蟻森林能量的實現(xiàn)代碼

    python連接手機自動搜集螞蟻森林能量的實現(xiàn)代碼

    這篇文章主要介紹了python連接手機自動搜集螞蟻森林能量的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • python實現(xiàn)數(shù)據(jù)導出到excel的示例--普通格式

    python實現(xiàn)數(shù)據(jù)導出到excel的示例--普通格式

    今天小編就為大家分享一篇python實現(xiàn)數(shù)據(jù)導出到excel的示例--普通格式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python利用matplotlib畫出漂亮的分析圖表

    Python利用matplotlib畫出漂亮的分析圖表

    這篇文章主要介紹了Python利用matplotlib畫出漂亮的分析圖表,文章首先引入數(shù)據(jù)集展開詳情,需要的朋友可以參考一下
    2022-07-07
  • python 定時器,實現(xiàn)每天凌晨3點執(zhí)行的方法

    python 定時器,實現(xiàn)每天凌晨3點執(zhí)行的方法

    今天小編就為大家分享一篇python 定時器,實現(xiàn)每天凌晨3點執(zhí)行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python實現(xiàn)員工管理系統(tǒng)

    python實現(xiàn)員工管理系統(tǒng)

    這篇文章主要介紹了python實現(xiàn)員工管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Tensorflow使用tfrecord輸入數(shù)據(jù)格式

    Tensorflow使用tfrecord輸入數(shù)據(jù)格式

    這篇文章主要介紹了Tensorflow使用tfrecord輸入數(shù)據(jù)格式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • redis數(shù)據(jù)庫及與python交互用法簡單示例

    redis數(shù)據(jù)庫及與python交互用法簡單示例

    這篇文章主要介紹了redis數(shù)據(jù)庫及與python交互用法,結合實例形式分析了Redis數(shù)據(jù)庫的基本類型、操作以及Python針對Redis數(shù)據(jù)庫的連接、增刪改查等相關操作技巧,需要的朋友可以參考下
    2019-11-11
  • Win10下用Anaconda安裝TensorFlow(圖文教程)

    Win10下用Anaconda安裝TensorFlow(圖文教程)

    這篇文章主要介紹了Win10下用Anaconda安裝TensorFlow(圖文教程),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Python多進程原理與用法分析

    Python多進程原理與用法分析

    這篇文章主要介紹了Python多進程原理與用法,結合實例形式分析了Python多進程原理、開啟使用進程、進程隊列、進程池等相關概念與使用方法,需要的朋友可以參考下
    2018-08-08
  • Python?數(shù)據(jù)庫操作SQL基礎

    Python?數(shù)據(jù)庫操作SQL基礎

    在本章節(jié)中,我們將討論?Python?數(shù)據(jù)庫操作的基礎知識,重點關注?SQL即Structured?Query?Language,結構化查詢語言,SQL?是用于管理關系型數(shù)據(jù)庫的標準編程語言,可以用來執(zhí)行數(shù)據(jù)定義、數(shù)據(jù)操作和數(shù)據(jù)控制等任務
    2023-06-06

最新評論