1. 程式人生 > 實用技巧 >【PyTorch】使用筆記

【PyTorch】使用筆記

檢查使用的GPU的索引

  • torch.cuda.is_available() cuda是否可用
  • torch.cuda.device_count() 返回gpu數量
  • torch.cuda.get_device_name(0)返回gpu名字,裝置索引預設從0開始;
  • torch.cuda.current_device()返回當前裝置索引;

如果使用GPU時,出現找不到cudnn可用,可能是因為GPU卡太老,pytorch不支援。

卷積Conv2d

torch.nn.Conv2d( in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True

)

  • dilation ( int )——控制卷積核元素之間的距離,預設1
  • groups ( int )——控制輸入通道和輸出通道的阻塞連線數,預設1
    • group=1,輸出是所有輸入的卷積;
    • group=2,相當於有兩個並排的卷積層,每個卷積層計算輸入通道的一半,輸出也是輸出通道的一半,隨後將兩個輸出連線起來得到最後結果;
    • group=in_channels,每一個輸入通道分別和它對應的卷積核進行卷積
  • kernel_size, stride, padding, dilation:
    • 是int數時,表示height和width值相同
    • 是tuple陣列時,則分別表示height和weight
  • bias ( bool ) —— 是否新增可學習的偏置到輸出中

二維卷積層,輸入到輸出尺寸的計算:

Wout= (Win + 2*padding - k) / stride + 1

其中 Win是輸入影象尺寸,padding補0數目,k 是卷積核尺寸,stride是步長

如果dilation 大於 1, 代表是空洞卷積,則需計算 空洞卷積 的等效卷積核 尺寸K,帶入上式 k 中

K=k_d+(k_d1)( d1)

其中 K 代表等效卷積核尺寸,k_d 代表實際卷積核尺寸, d 代表 dilation--空洞卷積的引數

引數變數:

  • weight(tensor)——卷積的權重,(out_channels, in_channels, kernel_size)
  • bias(tensor)——卷積的偏置,(out_channels)

Transforms

transforms.ToTensor(), # range [0, 255] -> [0.0,1.0],自動每個數除以255。相當於歸一化到 [0, 1]之間。

transforms.Normalize() 使用如下公式進行歸一化:

channel=(channel-mean)/std(因為transforms.ToTensor()已經把資料處理成[0,1],那麼(x-0.5)/0.5就是[-1.0, 1.0])

transforms.Normalize(mean = (0.5, 0.5, 0.5), std = (0.5, 0.5, 0.5))

transforms完整使用方法:

train_transform = transforms.Compose([
    transforms.ToPILImage(),
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(15),
    transforms.ToTensor(), # 將圖片轉成tensor,並把數值normalize到[0,1]
    transforms.Normalize(mean = (0.5, 0.5, 0.5), std = (0.5, 0.5, 0.5)),
])
View Code

然後在DataSet函式

__init__時,self.transform=transform

__getitem__(index)時,x = self.transform(X[index])

那麼問題來了,一般是normalize到哪個區間中呢??


個人學習記錄,如有描述欠妥之處,歡迎大家指出交流~(*^__^*)