3.2使用PyTorch搭建AlexNet并訓練花分類數據集
1、搭建AlexNet網絡
2、如何使用自己的數據集使用網絡
3、pytorch卷積操作詳解:https://blog.csdn.net/qq_37541097/article/details/102926037?spm=1001.2014.3001.5501 ——————————————————————————————————————————————————————
1、搭建AlexNet網絡
網絡結構:

定義網絡類:
- 定義初始化函數:定義網絡在正向傳播中所需要使用的層結構。
features:神經網絡層
使用nn.Sequential模塊:網絡層次比較多可以使用nn.Sequential簡潔代碼
kernel_size:卷積核個數,stride:卷積核步長,padding:邊緣補0的個數,如果是padding=(1,2)(上下,左右)則為上下方各補一行0,左右兩側各補兩列零;如果上下左右補零行數都不同,則使用nn.ZeroPad2d((1,2,1,2))(左右上下)
classifier:全連接層
使用nn.Sequential模塊
使用nn.Dropout
初始化判斷init_weights(nn.Sequential中的參數)(pytorch會自動初始化)
- 定義前向傳播
傳入神經網絡層
使用torch.flatten(x,start_dim=1):展平處理,索引從1開始(由于神經網絡層與全連接層結構差異,所以需要展平處理)
傳入全連接層
- 定義初始化判斷函數
2、訓練模型train.py
導入頭文件
定義使用CPU設備:
device = torch.device("cuda:0"if torch.cuda.is_available() else "cpu")
print(device)
數據預處理函數:
訓練集操作:torchvision.transforms是pytorch中的圖像預處理包。一般用Compose把多個步驟整合到一起。
-
-
- 隨機裁剪(224*224大小)
- 隨機翻轉
- 轉化為tensor
- 標準化處理
-
驗證集操作
-
-
- Resize為標準大小(224,224)
- 轉化為tensor
- 標準化處理
-
獲取數據集所在根目錄
3、pytorch卷積操作詳解:
pytorch中Tensor通道排列順序:[batch,channel,height,width]
常用的卷積函數:
torch.nn.Conv2d(
-
-
-
- in_channels, #代表輸入特征矩陣的深度即channel,比如輸入一張RGB彩色圖像,那in_channels=3
- out_channels, #代表卷積核的個數,使用n個卷積核輸出的特征矩陣深度即channel就是n
- kernel_size, #代表卷積核的尺寸,輸入可以是int類型如3 代表卷積核的height=width=3,也可以是tuple類型如(3, 5)代表卷積核的height=3,width=5
- stride=1, #代表卷積核的步距默認為1,和kernel_size一樣輸入可以是int類型,也可以是tuple類型
- padding=0, #參數代表在輸入特征矩陣四周補零的情況默認為0,同樣輸入可以為int型如1 代表上下方向各補一行0元素,左右方向各補一列0像素(即補一圈0)
- dilation=1,
- groups=1,
- bias=True, #表示是否使用偏置(默認使用)
- padding_mode='zeros'
-
-
)
在卷積操作中,矩陣經卷積后的尺寸由4個因數決定:
-
- 輸入圖片大小W*W
- Filter大小F*F
- 步長S
- padding的像素數
經卷積后的矩陣尺寸大小計算公式為:
N = (W ? F + 2P ) / S + 1
N為非整數的情況:在卷積過程中會直接刪除多余的行和列來保證卷積的輸出尺寸為整數,以保證N為整數
posted on 2021-05-30 14:54 NeverDelay 閱讀(413) 評論(0) 收藏 舉報
浙公網安備 33010602011771號