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...