
322
|
第七章:特定深度網路架構的調整
卷積層序列中並沒有魔法子彈
在撰寫本文時,並不存在一種具有魔力的卷積架構,可以完全適用於所有
圖片模型化問題。我們建議可以先從一些已知的成功架構開始進行嘗試,
例如 LeNet、VGGNet、Inception
2
或 AlexNet,試著把它套用到你想要解
決的問題中。你可以把已知的架構當成一個「好的開始」,試著調整各層
的配置與超參數,做為嘗試的起點。
最後我們的輸出層,則會依循第 6 章所呈現的模式。
設置卷積層
我們必須要設置卷積層的空間排列,然後選擇過濾器的數量。
在卷積層中設定超參數時,就必須決定輸出立方體中有多少個神經元,以及神經元排列
的方式。這裡就是一些關鍵的超參數:
• 過濾器大小(filter size)
• 步幅(stride)
• 填充(padding)
舉例來說,如果我們想要構建出帶有一些 5 × 5 過濾器的一個卷積層,程式碼看起來很
可能就類似下面這樣:
ConvolutionLayer convLayer = new ConvolutionLayer.Builder()
.kernelSize(5,5).stride(1,1).padding(2,2)
.name("first_layer")
.nOut(out)
.biasInit(bias)
.build();
在這個範例中,我們可以看到過濾器大小(
.kernelSize
)是 5 × 5,而且我們採用(1,1)
的步幅以及(2,2)的填充,這裡全都是採用整數的參數。我們使用
.name() ...