나선
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]
의 입력 텐서에서 작동합니다. 이는 각 항목이 -dimensional 벡터로 구성된 rank-n
개체로 inChannels
인식될 수 있습니다.
예를 들어 RGB 이미지에는 크기[W x H x 3]
[W x H]
가 크기가 지정된 구조체가 있습니다. 여기서 각 항목(픽셀)은 3개의 튜플로 구성됩니다(그러나 메모리 스토리지 형식은 3개의 크기의 [W x H]
평면 연결임).
Convolution()
-dimensional 필터를 n+1
사용하여 입력을 연결합니다. 여기서 첫 번째 n
차원은 필터의 공간 범위이고 마지막 차원은 같 inChannels
아야 합니다. outChannels
필터가 있습니다. 즉, 각 출력 위치에 대해 차원 outChannels
의 벡터가 계산됩니다. 따라서 필터 매개 변수의 총 수는 .입니다 (M1*M2*...*Mn) * inChannels * outChannels
.
Convolution()
에는 다음 매개 변수가 있습니다.
w
- 3개의 입력 채널에서 크기가 조정된 필터의 경우와 같이[5 x 5]
75
커널 차원의 곱이어야 하는 차원[outChannels, (M1*M2*...*Mn)]
(M1*M2*...*Mn)
의 행렬로 저장된 나선형 필터 가중치입니다.input
- 나선형 입력입니다. 차원이 있는 텐서입니다.[M1 x M2 x ... x Mn x inChannels]
kernel dimensions
- BrainScript 벡터로 지정된 입력 채널 수를 포함한 필터의 차원입니다. 마지막 차원은 입력 채널 수와 같아야 합니다. 예를 들어(5:5:3)
3 채널 입력에 대한 필터의 경우[5 x 5]
입니다.mapDims
- [명명됨, 선택 사항, 기본값: 0] 출력 채널 수(=위에서 호출outChannels
됨, 결과 기능 맵의 깊이와 동일). 0은 다음의 행 차원을 사용한다는 의미입니다.w
stride
- [named, optional, default is 1] stride dimensions. stride 1은 보폭 > 값의 배수인 픽셀 위치만 계산됨을 의미합니다. 예를 들어 보폭이 2이면 차원이 절반으로 줄어듭니다. 입력 채널 수와 일치하는 마지막 스트라이드 차원은 입력 채널 수와 같아야 합니다.sharing
- [명명됨, 선택 사항, 기본값은 true] 각 입력 차원에 대한 공유 플래그autoPadding
- 각 입력 차원에 대해 자동으로 패딩해야 하는지(즉, 대칭적으로) 패딩되지 않아야 하는지에 대한 플래그입니다. 안쪽 여백은 나선형 커널이 모든 픽셀 위치에 적용됨을 의미하며, 영역 외부의 모든 픽셀은 0으로 간주됩니다("0으로 패딩"). 패딩이 없으면 커널은 커널에 대한 모든 입력이 영역 내부에 있는 위치 위로만 이동됩니다. 이 경우 출력 차원은 입력 차원보다 작습니다. 입력 채널 수와 일치하는 마지막 값은 다음과 여야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
- [명명된 선택 사항]은 이미지의 측면이 0으로 채워져야 하는지 여부를 지정합니다. 기본값은 false입니다.maxTempMemSizeInSamples
- [명명된 선택 사항] 나선형 작업을 수행하기 위해 예약해야 하는 보조 메모리의 최대 양(샘플)입니다. 일부 나선형 엔진(예: cuDNN 및 GEMM 기반 엔진)은 성능이 향상될 수 있으므로 작업 영역을 사용하면 이점을 얻을 수 있습니다. 그러나 경우에 따라 메모리 사용률이 높아질 수 있습니다. 기본값은 입력 샘플과 동일한 0입니다.imageLayout
- [명명된 선택 사항] 각 이미지의 스토리지 형식입니다. 레거시 옵션입니다. 기본적으로HWC
각 이미지가 열 주체와 같이[channel, width, height]
저장됨을 의미합니다. cuDNN을 사용하여 학습 속도를 향상하는 경우 이를 설정cudnn
해야 합니다. 즉, 각 이미지가 로[width, height, channel]
저장됩니다. 레이아웃은cudnn
GPU와 CPU 모두에서 작동하므로 기본적으로 사용하는 것이 좋습니다.