【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_d−1)∗( d−1)
其中 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到哪個區間中呢??
個人學習記錄,如有描述欠妥之處,歡迎大家指出交流~(*^__^*)