我們經常看到:
這裡使用的mean= [ 0.485,0.456,0.406 ]和std=[ 0.229,0.224,0.225 ]進行歸一化.transform = transforms.compose([
transforms.randomresizedcrop(100),
transforms.randomhorizontalflip(),
transforms.totensor(),
transforms.normalize([0.485, 0.456, 0.406], [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)
分batch計算mean,再取平均。transform = transforms.compose([
transforms.topilimage(),
transforms.totensor(),
transforms.normalize(mean=*your_calculated_mean*, std=*your_calculated_std*)
])
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...