共用方式為


迴旋

Convolution (w, input,
             {kernel dimensions}, 
             mapDims = {map dimensions}, 
             stride = {stride dimensions}, 
             sharing = {sharing flags},
             autoPadding = {padding flags (boolean)},
             lowerPad = {lower padding (int)},
             upperPad = {upper padding (int)},
             maxTempMemSizeInSamples = 0)

Convolution() 使用影像或張量計算加權矩陣的卷積。 此作業用於影像處理應用程式和語言處理。 它支援任何維度、步幅、共用或填補。

此函式會在表單 [M1 x M2 x ... x Mn x inChannels] 的輸入張量上運作。 這可以理解為 rank- n 物件,其中每個專案都包含一個 inChannels 維度向量。 例如,RGB 影像會有維度 [W x H x 3] ,亦即 [W x H] 大小為的結構,其中每個專案 (圖元) 是由 3 元組 (附注所組成,不過,記憶體儲存體格式是大小 [W x H]) 3 個平面的串連。

Convolution() 使用 n+1 維度篩選來捲動輸入,其中第一 n 個維度是篩選的空間範圍,最後一個維度必須等於 inChannels 。 有 outChannels 篩選準則。 亦即,針對每個輸出位置,會計算維度 outChannels 的向量。 因此,篩選參數的總數是 (M1*M2*...*Mn) * inChannels * outChannels

Convolution() 具有下列參數:

  • w - 卷積篩選權數,儲存為維度 [outChannels, (M1*M2*...*Mn)] 的矩陣,其中 (M1*M2*...*Mn) 必須是核心維度的乘積,例如 75 ,針對 3 個 [5 x 5] 輸入通道上的調整大小篩選。
  • input - 卷積輸入。 具有維度 的 [M1 x M2 x ... x Mn x inChannels] 張量。
  • kernel dimensions - 篩選的維度, 包括 輸入通道的數目,指定為 BrainScript 向量。 最後一個維度必須等於輸入通道的數目。 例如 (5:5:3) ,針對 [5 x 5] 3 通道輸入的篩選。
  • mapDims - [具名,選擇性,預設值為 0],輸出通道數目 (= outChannels 上述名稱;與產生的特徵對應深度相同) 。 0 表示使用 的資料列維度 w
  • stride - [具名,選擇性,預設值為 1] 個進階維度。 十分 > 1 表示只會計算十分數值倍數的圖元位置。 例如,2 的步幅會導致維度變半。 最後一個與輸入通道數目相等的進位維度必須等於輸入通道的數目。
  • sharing - [具名,選擇性,預設值為 true] 每個輸入維度的共用旗標
  • autoPadding - [具名、選擇性、預設值為 true] 每個輸入維度的旗標,不論它是否應該自動填補 (,也就是對稱式) 或完全未填補。 填補表示卷積核心會套用至所有圖元位置,其中區域以外的所有圖元都假設為零 (「以零填補」) 。 若未填補,核心只會移轉至核心的所有輸入仍落在區域內的位置。 在此情況下,輸出維度會小於輸入維度。 與輸入通道數目一行的最後一個值必須是 false
  • lowerPad - [具名,選擇性,預設值為 0] 每個輸入維度的精確下限填補。
  • upperPad - [具名,選擇性,預設值為 0] 每個輸入維度的精確上限填補。
  • maxTempMemSizeInSamples - [具名選擇性] 範例中應保留來執行卷積作業的樣本中輔助記憶體 (數量上限) 。 某些卷積引擎 (例如 cuDNN 和 GEMM 型引擎,) 可以受益于使用工作區,因為它可能會改善效能。 不過,有時候這可能會導致較高的記憶體使用率。 預設值為 0,這表示與輸入範例相同。

表單 {...} 的所有值都必須實際以冒號分隔的值序列來指定,例如 (5:5) 核心維度。 (如果您使用已被 NDLNetworkBuilder 取代的 ,這些必須以逗號分隔並改為括住 { } 。)

範例︰

ConvReLULayer(inp, outMap, inMap, kW, kH, hStride, vStride, wScale, bValue) =
[
    W = Parameter (outMap, inMap * kW * kH, init="gaussian", initValueScale=wScale)
    b = Parameter (outMap, 1, init="fixedValue", value=bValue)
    c = Convolution (W, inp, (kW:kH:inMap), stride=(hStride:vStride:inMap), autoPadding=(true:true:false))
    y = RectifiedLinear (c + b)
].y

注意:如果您使用已被 NDLNetworkBuilder 取代的 ,則範例中不應該有尾端 .y

簡化的 2D 卷積 (已被取代的 NDL)

現在已被取代的 NDL 語言提供 的簡化 2D 變體 Convolution()

Convolution (w, image, 
             kernelWidth, kernelHeight, mapDims, 
             horizontalStride, verticalStride,
             zeroPadding=false, maxTempMemSizeInSamples=0, imageLayout="cudnn" /* or "HWC"*/ )

其中:

  • w - 卷積權數矩陣,其維度為 [mapDims, kernelWidth * kernelHeight * inputChannels]
  • image - 輸入影像。
  • kernelWidth - 核心的寬度
  • kernelHeight - 核心的高度
  • mapDims - 輸出功能地圖的深度 (輸出通道數目)
  • horizontalStride - 水準方向的步進
  • verticalStride - 垂直方向的步進
  • zeroPadding - [具名選擇性] 指定影像側邊是否應該以零填補。 預設值為 false。
  • maxTempMemSizeInSamples - [具名選擇性] 範例中應保留來執行卷積作業的樣本中輔助記憶體 (數量上限) 。 某些卷積引擎 (例如 cuDNN 和 GEMM 型引擎,) 可以受益于使用工作區,因為它可能會改善效能。 不過,有時候這可能會導致較高的記憶體使用率。 預設值為 0,這表示與輸入範例相同。
  • imageLayout - [具名選擇性] 每個影像的儲存格式。 這是舊版選項。 根據預設, HWC 它是 ,這表示每個影像會儲存為 [channel, width, height] 資料行主要。 如果您使用 cuDNN 來加速定型,您應該將其 cudnn 設定為 ,這表示每個影像都會儲存為 [width, height, channel] 。 請注意,配置 cudnn 會在 GPU 和 CPU 上運作,因此建議預設使用。