兩種比較重要的抗過擬合方法

2021-10-09 14:03:20 字數 2973 閱讀 7086

1.label smoothing

原理:

就是將硬標籤轉換為軟標籤===》[0, 1]  ==>[0.05, 0.95]

動機:說白了,這個平滑就是一定程度縮小label中min和max的差距,label平滑可以減小過擬合。

適當調整label,讓兩端的極值往中間湊湊,可以增加泛化效能

公式:同crossentropy計算時

#同crossentropy損失函式計算(重點,就是在計算損失的時候用的)

import torch

import torch.nn as nn

class labelsmoothing(nn.module):

"""nll loss with label smoothing.

"""def __init__(self, smoothing=0.0):

"""constructor for the labelsmoothing module.

:param smoothing: label smoothing factor

"""super(labelsmoothing, self).__init__()

self.confidence = 1.0 - smoothing

self.smoothing = smoothing

def forward(self, x, target):

logprobs = torch.nn.functional.log_softmax(x, dim=-1)

nll_loss = -logprobs.gather(dim=-1, index=target.unsqueeze(1))

nll_loss = nll_loss.squeeze(1)

smooth_loss = -logprobs.mean(dim=-1)

loss = self.confidence * nll_loss + self.smoothing * smooth_loss

return loss.mean()

2.dropblock原理:在卷積層之後使用dropout,相當於對卷積層使用dropout

動機:原始dropout使用在dropout上沒效果,主要是卷積操作在鄰域有資訊共享,要想起效果需要把鄰域都drop掉

方法:

先在特徵圖上隨機找幾個需要dropout的中心點,然後以這些點為中心將周圍都dropout掉

gamma的計算:

圖中黃色的是feature區域,藍色的是drop塊的大小,綠色是可以選擇中心點的區域

最後推出那個gamma的公式。

演算法流程:

1.隨機出來乙個和輸入x大小一樣的mask矩陣(服從正態分佈)

2.給定乙個gamma,將mask3.生成mask塊,實現方法就是採用最大池化

4.x*mask

import torch

import torch.nn as nn

class dropblock2d(nn.module):

def __init__(self, drop_prob, block_size):

super(dropblock2d, self).__init__()

self.drop_prob = drop_prob #丟失率

self.block_size = block_size #drop塊的大小

def forward(self, x):

assert x.dim() == 4

if not self.training or self.drop_prob == 0:

return x

else:

gamma = self._compute_gamma(x)

mask = (torch.rand(x.shape[0], *x.shape[2:])

mask = mask.to(x.device)

block_mask = self._compute_block_mask(mask)

out = x*block_mask[:, none, :, :]

out = out*block_mask.numel()/block_mask.sum()

return out

def _compute_block_mask(self, mask):

block_mask = f.max_pool2d(input=mask[:, none, :,:],

kernel_size=(self.block_size, self.block_size),

stride=(1,1),

padding=self.block_size//2

)def _compute_gamma(self, x):

return self.drop_prob /(self.block_size**2)

八個比較重要的http方法

get 傳送簡單資訊 安全效能差 有字數限制 post 傳送重要資訊 無字數限制 head 只要求得到get返回結果的首部份。它能提供索請求的url的有關資訊,但是不會返回實際要用的東西 trace 要求請求訊息傳送,測試排錯用 put 指定要把所包含的資訊放在請求的url上 delete 刪除指定...

TreeSet兩種自然比較方法

一 1.用treeset集合儲存自定義物件,無參構造方法使用的是自然排序對元素進行排序的自然排序,2.就是讓元素所屬的類實現comparable介面,重寫compareto t o 方法 3.重寫方法時,一定要注意排序規則必須按照要求的主要條件和次要條件來寫 public class student...

兩種排序方法的效率比較

前提 筆記本測試,效能一般,測試前開了好多記憶體殺手。唯一變數 陣列的長度,其餘各項均不發生變化。此測試不具有一般性 資料量太少,實驗重複次數不夠,沒有空白對比試驗 聽著怎麼像是生物實驗了 如果感興趣,可以自己做重複實驗。第一種,經典的氣泡排序,如下 a long start system.curr...