Pytorch 在預訓練模型中輸入的資料預處理

2021-09-19 10:41:48 字數 1614 閱讀 5473

我們經常看到:

transform = transforms.compose([

transforms.randomresizedcrop(100),

transforms.randomhorizontalflip(),

transforms.totensor(),

transforms.normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])

])

這裡使用的mean= [ 0.485,0.456,0.406 ]和std=[ 0.229,0.224,0.225 ]進行歸一化.

這裡的數字是在預訓練模型訓練的時候採用的格式,我們需要和預訓練模型保持相同的格式。

同時在pytorch官方介紹中說明了預訓練模型都是採用【0,1】標準分布的影象訓練。

以下是pytorch的樣例所使用的mean和std

附上計算mean和std的**:

transform = transforms.compose([

transforms.topilimage(),

transforms.totensor()

])dataloader = torch.utils.data.dataloader(*torch_dataset*, batch_size=4096, shuffle=false, num_workers=4)

pop_mean =

pop_std0 =

pop_std1 =

for i, data in enumerate(dataloader, 0):

# shape (batch_size, 3, height, width)

numpy_image = data['image'].numpy()

# shape (3,)

batch_mean = np.mean(numpy_image, axis=(0,2,3))

batch_std0 = np.std(numpy_image, axis=(0,2,3)) ##總體方差

batch_std1 = np.std(numpy_image, axis=(0,2,3), ddof=1) ##樣本方差

# shape (num_iterations, 3) -> (mean across 0th axis) -> shape (3,)

pop_mean = np.array(pop_mean).mean(axis=0)

pop_std0 = np.array(pop_std0).mean(axis=0)

pop_std1 = np.array(pop_std1).mean(axis=0)

計算出來只需要新增即可:

transform = transforms.compose([

transforms.topilimage(),

transforms.totensor(),

transforms.normalize(mean=*your_calculated_mean*, std=*your_calculated_std*)

])

分batch計算mean,再取平均。

pytorch 修改預訓練模型

torchvision中提供了很多訓練好的模型,這些模型是在1000類,224 224的imagenet中訓練得到的,很多時候不適合我們自己的資料,可以根據需要進行修改。1 類別不同 coding utf 8 import torchvision.models as models 呼叫模型 mode...

pytorch 載入預訓練模型

pytorch的torchvision中給出了很多經典的預訓練模型,模型的引數和權重都是在imagenet資料集上訓練好的 載入模型 方法一 直接使用預訓練模型中的引數 import torchvision.models as models model models.resnet18 pretrai...

pytorch系列3 在預訓練好的模型上進行微調

在訓練網路時經常要進行微調,原來用caffe比較多,相對來說caffe的微調要簡單,那麼pytorch是怎麼實現網路的微調呢,我的方法是 匯入原來的網路 import modules original 匯入新的網路 import modules pre net modules original pr...