이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
convolution2dLayer
2차원 컨벌루션 계층
설명
2차원 컨벌루션 계층은 2차원 입력값에 슬라이딩 컨벌루션 필터를 적용합니다. 이 계층은 입력값의 세로와 가로 방향을 따라 필터를 이동하면서 가중치와 입력값의 내적을 계산한 다음 편향 항을 추가하여 입력값을 컨벌루션합니다.
계층이 컨벌루션하는 차원은 계층 입력값에 따라 다릅니다.
2차원 영상 입력값의 경우(2개 공간 차원의 픽셀, 채널, 관측값에 상응하는 4차원 데이터), 계층은 공간 차원에 대해 컨벌루션합니다.
2차원 영상 시퀀스 입력값의 경우(2개 공간 차원의 픽셀, 채널, 관측값, 시간 스텝에 상응하는 5차원 데이터), 계층은 2개 공간 차원에 대해 컨벌루션합니다.
1차원 영상 시퀀스 입력값의 경우(1개 공간 차원의 픽셀, 채널, 관측값, 시간 스텝에 상응하는 4차원 데이터), 계층은 공간 차원과 시간 차원에 대해 컨벌루션합니다.
생성
구문
설명
는 2차원 컨벌루션 계층을 만들고 layer
= convolution2dLayer(filterSize
,numFilters
)FilterSize
와 NumFilters
속성을 설정합니다.
는 이름-값 쌍을 사용하여 선택 사항인 layer
= convolution2dLayer(filterSize
,numFilters
,Name,Value
)Stride
, DilationFactor
, NumChannels
, 파라미터 및 초기화, 학습률 및 정규화, Name
속성을 설정합니다. 입력값 채우기를 지정하려면 'Padding'
이름-값 쌍 인수를 사용하십시오. 예를 들어, convolution2dLayer(11,96,'Stride',4,'Padding',1)
은 크기가 [11 11]
인 필터 96개와 크기가 [4 4]
인 스트라이드를 가지며 계층 입력값의 모든 가장자리에 크기 1의 채우기를 적용하는 2차원 컨벌루션 계층을 만듭니다. 여러 개의 이름-값 쌍을 지정할 수 있습니다. 각 속성 이름을 작은따옴표로 묶습니다.
입력 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: convolution2dLayer(3,16,'Padding','same')
은 크기가 [3 3]
인 필터 16개를 가지며 'same'
채우기를 적용하는 2차원 컨벌루션 계층을 만듭니다. 훈련 시점에 계층 출력 크기가 입력 크기와 같아지는 채우기 크기가 계산되고 설정됩니다.
Padding
— 입력값 가장자리 채우기
[0 0 0 0]
(디폴트 값) | 음이 아닌 정수로 구성된 벡터 | 'same'
입력값 가장자리 채우기로, 'Padding'
과 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다.
'same'
— 스트라이드가 1인 경우 출력 크기가 입력 크기와 같아지도록 훈련 또는 예측 시점에 계산한 크기의 채우기가 적용됩니다. 스트라이드가 1보다 큰 경우, 출력 크기는ceil(inputSize/stride)
가 됩니다. 여기서inputSize
는 입력값의 높이 또는 너비이고stride
는 대응되는 차원의 스트라이드입니다. 가능한 경우 상하좌우에 동일한 양의 채우기가 적용됩니다. 세로 방향으로 더해야 하는 채우기가 홀수 값을 갖는 경우, 아래에 추가로 채우기가 적용됩니다. 가로 방향으로 더해야 하는 채우기가 홀수 값을 갖는 경우, 오른쪽에 추가로 채우기가 적용됩니다.음이 아닌 정수
p
— 입력값의 모든 가장자리에 크기가p
인 채우기를 더합니다.음이 아닌 정수로 구성된 벡터
[a b]
— 입력값의 위와 아래에 크기가a
인 채우기를 더하고 왼쪽과 오른쪽에 크기가b
인 채우기를 더합니다.음이 아닌 정수로 구성된 벡터
[t b l r]
— 입력값의 위에 크기가t
인 채우기를, 아래에 크기가b
인 채우기를, 왼쪽에 크기가l
인 채우기를, 오른쪽에 크기가r
인 채우기를 더합니다.
예: 'Padding',1
은 입력값의 위와 아래에 채우기 한 행을 더하고, 왼쪽과 오른쪽에 채우기 한 열을 더합니다.
예: 'Padding','same'
은 (스트라이드가 1인 경우) 출력 크기가 입력 크기와 같아지도록 채우기를 더합니다.
속성
2차원 컨벌루션
FilterSize
— 필터의 높이와 너비
2개의 양의 정수로 구성된 벡터
필터의 높이와 너비로, 2개의 양의 정수로 구성된 벡터 [h w]
로 지정됩니다. 여기서 h
는 높이이고 w
는 너비입니다. FilterSize
는 입력값에서 뉴런이 연결되는 국소 영역의 크기를 정의합니다.
계층을 만들 때 높이와 너비에 같은 값을 사용하려면 FilterSize
를 스칼라로 지정하면 됩니다.
예: [5 5]
는 높이가 5이고 너비가 5인 필터를 지정합니다.
NumFilters
— 필터 개수
양의 정수
읽기 전용 속성입니다.
필터 개수로, 양의 정수로 지정됩니다. 이 수치는 계층에서 입력값의 동일한 영역에 연결되는 뉴런의 개수에 대응됩니다. 이 파라미터는 계층의 출력값에 있는 채널(특징 맵)의 개수를 결정합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Stride
— 입력값 순회 스텝 크기
[1 1]
(디폴트 값) | 2개의 양의 정수로 구성된 벡터
입력값을 세로와 가로 방향으로 순회하는 스텝 크기로, 2개의 양의 정수로 구성된 벡터 [a b]
로 지정됩니다. 여기서 a
는 세로 스텝 크기이고 b
는 가로 스텝 크기입니다. 계층을 만들 때 세로, 가로 스텝 크기에 모두 같은 값을 사용하려면 Stride
를 스칼라로 지정하면 됩니다.
예: [2 3]
은 세로 스텝 크기를 2로, 가로 스텝 크기를 3으로 지정합니다.
DilationFactor
— 팽창된 컨벌루션 인자
[1 1]
(디폴트 값) | 2개의 양의 정수로 구성된 벡터
팽창된 컨벌루션(아트루스 컨벌루션이라고도 함) 인자로, 2개의 양의 정수로 구성된 벡터 [h w]
로 지정됩니다. 여기서 h
는 세로 팽창이고 w
는 가로 팽창입니다. 계층을 만들 때 세로와 가로 팽창에 모두 같은 값을 사용하려면 DilationFactor
를 스칼라로 지정하면 됩니다.
파라미터의 개수나 연산량을 늘리지 않으면서 계층의 수용 영역(입력값에서 계층이 볼 수 있는 영역)을 늘리려는 경우 팽창된 컨벌루션을 사용할 수 있습니다.
이 계층은 각 필터 요소 사이에 0을 삽입하여 필터를 확장합니다. 팽창 인자는 입력값 추출을 위한 스텝 크기 또는 이와 동등한 필터 업샘플링 인자를 결정합니다. 팽창 인자에 따라 필터 크기가 (Filter Size – 1) .* Dilation Factor + 1로 정해집니다. 예를 들어, 팽창 인자가 [2 2]
인 3×3 필터는 요소들 사이에 0이 삽입된 5×5 필터와 같습니다.
예: [2 3]
PaddingSize
— 채우기 크기
[0 0 0 0]
(디폴트 값) | 4개의 음이 아닌 정수로 구성된 벡터
입력값 테두리에 적용할 채우기 크기로, 4개의 음이 아닌 정수로 구성된 벡터 [t b l r]
로 지정됩니다. 여기서 t
는 위에 적용할 채우기이고 b
는 아래에 적용할 채우기이고 l
은 왼쪽에 적용할 채우기이고 r
은 오른쪽에 적용할 채우기입니다.
계층을 만들 때 'Padding'
이름-값 쌍 인수를 사용하여 채우기 크기를 지정합니다.
예: [1 1 2 2]
는 입력값의 위와 아래에 채우기 한 행을 더하고, 왼쪽과 오른쪽에 채우기 두 열을 더합니다.
PaddingMode
— 채우기 크기를 결정하는 방법
'manual'
(디폴트 값) | 'same'
채우기 크기를 결정하는 방법으로, 'manual'
또는 'same'
으로 지정됩니다.
계층을 만들 때 사용자가 지정한 'Padding'
값을 기준으로 자동으로 PaddingMode
의 값이 설정됩니다.
'Padding'
옵션을 스칼라 또는 음이 아닌 정수로 구성된 벡터로 설정한 경우, 자동으로PaddingMode
가'manual'
로 설정됩니다.'Padding'
옵션을'same'
으로 설정한 경우, 자동으로PaddingMode
가'same'
으로 설정되고, 스트라이드가 1인 경우 출력 크기가 입력 크기와 같아지도록 채우기 크기가 훈련 시점에 계산됩니다. 스트라이드가 1보다 큰 경우, 출력 크기는ceil(inputSize/stride)
가 됩니다. 여기서inputSize
는 입력값의 높이 또는 너비이고stride
는 대응되는 차원의 스트라이드입니다. 가능한 경우 상하좌우에 동일한 양의 채우기가 적용됩니다. 세로 방향으로 더해야 하는 채우기가 홀수 값을 갖는 경우, 아래에 추가로 채우기가 적용됩니다. 가로 방향으로 더해야 하는 채우기가 홀수 값을 갖는 경우, 오른쪽에 추가로 채우기가 적용됩니다.
Padding
— 채우기 크기
[0 0]
(디폴트 값) | 2개의 음이 아닌 정수로 구성된 벡터
참고
Padding
속성은 향후 릴리스에서 제거될 예정입니다. PaddingSize
를 대신 사용하십시오. 계층을 만들 때 'Padding'
이름-값 쌍 인수를 사용하여 채우기 크기를 지정합니다.
입력값 테두리에 세로와 가로 방향으로 적용할 채우기 크기로, 2개의 음이 아닌 정수로 구성된 벡터 [a b]
로 지정됩니다. 여기서 a
는 입력 데이터의 위와 아래에 적용할 채우기이고 b
는 왼쪽과 오른쪽에 적용할 채우기입니다.
예: [1 1]
은 입력값의 위와 아래에 채우기 한 행을 더하고, 왼쪽과 오른쪽에 채우기 한 열을 더합니다.
PaddingValue
— 데이터에 채울 값
0 (디폴트 값) | 스칼라 | 'symmetric-include-edge'
| 'symmetric-exclude-edge'
| 'replicate'
데이터에 채울 값으로, 다음 중 하나로 지정됩니다.
PaddingValue | 설명 | 예 |
---|---|---|
스칼라 | 지정된 스칼라 값으로 채웁니다. | |
'symmetric-include-edge' | 가장자리 값을 포함해 미러링된 입력값을 사용하여 채웁니다. | |
'symmetric-exclude-edge' | 가장자리 값을 제외하고 미러링된 입력값을 사용하여 채웁니다. | |
'replicate' | 입력의 반복되는 테두리 요소를 사용하여 채웁니다. | |
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
NumChannels
— 입력 채널의 개수
'auto'
(디폴트 값) | 양의 정수
읽기 전용 속성입니다.
입력 채널의 개수로, 다음 중 하나로 지정됩니다.
'auto'
— 훈련 시점에 자동으로 입력 채널의 개수가 결정됩니다.양의 정수 — 지정된 입력 채널의 개수에 맞게 계층을 구성합니다.
NumChannels
와 계층 입력 데이터의 채널 개수는 일치해야 합니다. 예를 들어, 입력값이 RGB 영상이면NumChannels
는 3이어야 합니다. 입력값이 16개의 필터가 있는 컨벌루션 계층의 출력값이면NumChannels
는 16이어야 합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
파라미터 및 초기화
WeightsInitializer
— 가중치를 초기화하는 함수
'glorot'
(디폴트 값) | 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| 함수 핸들
가중치를 초기화하는 함수로, 다음 중 하나로 지정됩니다.
'glorot'
– Glorot 이니셜라이저[4](Xavier 이니셜라이저라고도 함)를 사용하여 가중치를 초기화합니다. Glorot 이니셜라이저는 평균이 0이고 분산이2/(numIn + numOut)
인 균등분포에서 독립적으로 샘플링합니다. 여기서numIn = FilterSize(1)*FilterSize(2)*NumChannels
이고numOut = FilterSize(1)*FilterSize(2)*NumFilters
입니다.'he'
– He 이니셜라이저[5]를 사용하여 가중치를 초기화합니다. He 이니셜라이저는 평균이 0이고 분산이2/numIn
인 정규분포에서 샘플링합니다. 여기서numIn = FilterSize(1)*FilterSize(2)*NumChannels
입니다.'narrow-normal'
– 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 가중치를 초기화합니다.'zeros'
– 가중치를 0으로 초기화합니다.'ones'
– 가중치를 1로 초기화합니다.함수 핸들 – 사용자 지정 함수를 사용하여 가중치를 초기화합니다. 함수 핸들을 지정할 경우, 함수는
weights = func(sz)
형식이 되어야 합니다. 여기서sz
는 가중치의 크기입니다. 예제는 Specify Custom Weight Initialization Function 항목을 참조하십시오.
계층은 Weights
속성이 비어 있는 경우에만 가중치를 초기화합니다.
데이터형: char
| string
| function_handle
BiasInitializer
— 편향을 초기화하는 함수
"zeros"
(디폴트 값) | "narrow-normal"
| "ones"
| 함수 핸들
편향을 초기화하는 함수로, 다음 값 중 하나로 지정됩니다.
"zeros"
— 편향을 0으로 초기화합니다."ones"
— 편향을 1로 초기화합니다."narrow-normal"
— 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 편향을 초기화합니다.함수 핸들 — 사용자 지정 함수를 사용하여 편향을 초기화합니다. 함수 핸들을 지정할 경우, 함수는
bias = func(sz)
형식을 가져야 합니다. 여기서sz
는 편향의 크기입니다.
계층은 Bias
속성이 비어 있는 경우에만 편향을 초기화합니다.
데이터형: char
| string
| function_handle
Weights
— 계층 가중치
[]
(디폴트 값) | 숫자형 배열
컨벌루션 계층의 계층 가중치로, 숫자형 배열로 지정됩니다.
계층 가중치는 학습 가능한 파라미터입니다. 계층의 Weights
속성을 사용하여 가중치의 초기값을 직접 지정할 수 있습니다. 신경망을 훈련시킬 때 계층의 Weights
속성이 비어 있지 않으면 trainnet
함수 및 trainNetwork
함수는 Weights
속성을 초기값으로 사용합니다. Weights
속성이 비어 있으면 계층의 WeightsInitializer
속성으로 지정된 이니셜라이저가 사용됩니다.
훈련 시점에 Weights
는 FilterSize(1)
×FilterSize(2)
×NumChannels
×NumFilters
배열입니다.
데이터형: single
| double
Bias
— 계층 편향
[]
(디폴트 값) | 숫자형 배열
컨벌루션 계층의 계층 편향으로, 숫자형 배열로 지정됩니다.
계층 편향은 학습 가능한 파라미터입니다. 신경망을 훈련시킬 때 Bias
가 비어 있지 않으면 trainnet
및 trainNetwork
함수는 Bias
속성을 초기값으로 사용합니다. Bias
가 비어 있으면 BiasInitializer
로 지정된 이니셜라이저가 사용됩니다.
훈련 시점에 Bias
는 1×1×NumFilters
배열입니다.
데이터형: single
| double
학습률 및 정규화
WeightLearnRateFactor
— 가중치에 대한 학습률 인자
1
(디폴트 값) | 음이 아닌 스칼라
가중치에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.
이 인자에 전역 학습률을 곱하여 이 계층의 가중치에 대한 학습률이 결정됩니다. 예를 들어, WeightLearnRateFactor
가 2
인 경우, 이 계층의 가중치에 대한 학습률은 현재 전역 학습률의 2배입니다. trainingOptions
함수를 사용하여 지정한 설정을 기반으로 전역 학습률이 결정됩니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
BiasLearnRateFactor
— 편향에 대한 학습률 인자
1
(디폴트 값) | 음이 아닌 스칼라
편향에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.
이 인자에 전역 학습률을 곱하여 이 계층의 편향에 대한 학습률이 결정됩니다. 예를 들어, BiasLearnRateFactor
가 2
인 경우, 이 계층의 편향에 대한 학습률은 현재 전역 학습률의 2배입니다. trainingOptions
함수를 사용하여 지정한 설정을 기반으로 전역 학습률이 결정됩니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
WeightL2Factor
— 가중치에 대한 L2 정규화 인자
1 (디폴트 값) | 음이 아닌 스칼라
가중치에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.
이 인자에 전역 L2 정규화 인자를 곱하여 이 계층의 가중치에 대한 L2 정규화가 결정됩니다. 예를 들어, WeightL2Factor
가 2
인 경우, 이 계층의 가중치에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. 전역 L2 정규화 인자는 trainingOptions
함수를 사용하여 지정할 수 있습니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
BiasL2Factor
— 편향에 대한 L2 정규화 인자
0
(디폴트 값) | 음이 아닌 스칼라
편향에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.
이 인자에 전역 L2 정규화 인자를 곱하여 이 계층의 편향에 대한 L2 정규화가 결정됩니다. 예를 들어, BiasL2Factor
가 2
인 경우, 이 계층의 편향에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. trainingOptions
함수를 사용하여 지정한 설정을 기반으로 전역 L2 정규화 인자가 결정됩니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
계층
NumInputs
— 입력값의 개수
1
(디폴트 값)
읽기 전용 속성입니다.
계층에 대한 입력값의 개수로, 1
로 반환됩니다. 이 계층은 단일 입력값만 받습니다.
데이터형: double
InputNames
— 입력값 이름
{'in'}
(디폴트 값)
읽기 전용 속성입니다.
입력값 이름으로, {'in'}
으로 반환됩니다. 이 계층은 단일 입력값만 받습니다.
데이터형: cell
NumOutputs
— 출력값 개수
1
(디폴트 값)
읽기 전용 속성입니다.
계층의 출력값 개수로, 1
로 반환됩니다. 이 계층은 단일 출력값만 가집니다.
데이터형: double
OutputNames
— 출력값 이름
{'out'}
(디폴트 값)
읽기 전용 속성입니다.
출력값 이름으로, {'out'}
으로 반환됩니다. 이 계층은 단일 출력값만 가집니다.
데이터형: cell
예제
컨벌루션 계층 만들기
높이와 너비가 11인 필터 96개를 갖는 컨벌루션 계층을 만듭니다. 가로 방향과 세로 방향에서 크기가 4인 스트라이드(스텝 크기)를 사용합니다.
layer = convolution2dLayer(11,96,'Stride',4)
layer = Convolution2DLayer with properties: Name: '' Hyperparameters FilterSize: [11 11] NumChannels: 'auto' NumFilters: 96 Stride: [4 4] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
Layer
배열에 컨벌루션 계층을 포함시킵니다.
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer]
layers = 6x1 Layer array with layers: 1 '' Image Input 28x28x1 images with 'zerocenter' normalization 2 '' 2-D Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0] 3 '' ReLU ReLU 4 '' 2-D Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 '' Fully Connected 10 fully connected layer 6 '' Softmax softmax
컨벌루션 계층에서 초기 가중치와 편향 지정하기
가중치 이니셜라이저 함수와 편향 이니셜라이저 함수를 지정하려면 각각 WeightsInitializer
속성과 BiasInitializer
속성을 사용하십시오. 가중치와 편향을 직접 지정하려면 각각 Weights
속성과 Bias
속성을 사용하십시오.
초기화 함수 지정하기
높이와 너비가 5인 필터 32개를 갖는 컨벌루션 계층을 만들고 가중치 이니셜라이저를 He 이니셜라이저로 지정합니다.
filterSize = 5; numFilters = 32; layer = convolution2dLayer(filterSize,numFilters, ... 'WeightsInitializer','he')
layer = Convolution2DLayer with properties: Name: '' Hyperparameters FilterSize: [5 5] NumChannels: 'auto' NumFilters: 32 Stride: [1 1] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
Weights
속성과 Bias
속성은 비어 있는 것을 볼 수 있습니다. 이러한 속성은 지정된 초기화 함수를 사용하여 훈련 시점에 초기화됩니다.
사용자 지정 초기화 함수 지정하기
가중치와 편향에 대해 자신만의 고유한 초기화 함수를 지정하려면 WeightsInitializer
속성과 BiasInitializer
속성을 함수 핸들로 설정하십시오. 이러한 속성에 대해, 가중치와 편향의 크기를 입력값으로 받고 초기화된 값을 출력하는 함수 핸들을 지정합니다.
높이와 너비가 5인 필터 32개를 갖는 컨벌루션 계층을 만들고, 표준편차가 0.0001인 가우스 분포에서 가중치와 편향을 샘플링하는 이니셜라이저를 지정합니다.
filterSize = 5; numFilters = 32; layer = convolution2dLayer(filterSize,numFilters, ... 'WeightsInitializer', @(sz) rand(sz) * 0.0001, ... 'BiasInitializer', @(sz) rand(sz) * 0.0001)
layer = Convolution2DLayer with properties: Name: '' Hyperparameters FilterSize: [5 5] NumChannels: 'auto' NumFilters: 32 Stride: [1 1] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
이번에도 Weights
속성과 Bias
속성은 비어 있습니다. 이러한 속성은 지정된 초기화 함수를 사용하여 훈련 시점에 초기화됩니다.
가중치와 편향을 직접 지정하기
출력 크기가 10인 완전 연결 계층을 만들고, MAT 파일 Conv2dWeights.mat
에서 가중치와 편향을 각각 W
와 b
로 설정합니다.
filterSize = 5; numFilters = 32; load Conv2dWeights layer = convolution2dLayer(filterSize,numFilters, ... 'Weights',W, ... 'Bias',b)
layer = Convolution2DLayer with properties: Name: '' Hyperparameters FilterSize: [5 5] NumChannels: 3 NumFilters: 32 Stride: [1 1] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [5x5x3x32 double] Bias: [1x1x32 double] Use properties method to see a list of all properties.
여기서는 Weights
속성과 Bias
속성에 지정된 값이 포함되어 있습니다. 이러한 속성이 비어 있지 않으면 지정된 값이 훈련 시점에 초기 가중치 및 편향으로 사용됩니다. 이 경우 소프트웨어가 이니셜라이저 함수를 사용하지 않습니다.
입력값을 완전히 덮는 컨벌루션 계층 만들기
입력값의 크기가 28×28×1이라고 가정하겠습니다. 높이가 6이고 너비가 4인 필터 16개를 갖는 컨벌루션 계층을 만듭니다. 가로와 세로 방향의 스트라이드를 4로 설정합니다.
컨벌루션이 입력값을 완전히 덮도록 해야 합니다. 컨벌루션이 입력값을 완전히 덮으려면 가로와 세로 출력 크기가 모두 정수가 되어야 합니다. 가로 출력 크기가 정수가 되기 위해서는 영상의 위와 아래에 채우기 한 행이 필요합니다. (28 – 6+ 2 * 1)/4 + 1 = 7. 세로 출력 크기가 정수가 되기 위해서는 0 채우기가 필요하지 않습니다. (28 – 4+ 2 * 0)/4 + 1 = 7.
컨벌루션 계층을 생성합니다.
layer = convolution2dLayer([6 4],16,'Stride',4,'Padding',[1 0])
layer = Convolution2DLayer with properties: Name: '' Hyperparameters FilterSize: [6 4] NumChannels: 'auto' NumFilters: 16 Stride: [4 4] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [1 1 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
알고리즘
2차원 컨벌루션 계층
2차원 컨벌루션 계층은 2차원 입력값에 슬라이딩 컨벌루션 필터를 적용합니다. 이 계층은 입력값의 세로와 가로 방향을 따라 필터를 이동하고 가중치와 입력값의 내적을 계산한 다음 편향 항을 추가하여 입력값을 컨벌루션합니다.
계층이 컨벌루션하는 차원은 계층 입력값에 따라 다릅니다.
2차원 영상 입력값의 경우(2개 공간 차원의 픽셀, 채널, 관측값에 상응하는 4차원 데이터), 계층은 공간 차원에 대해 컨벌루션합니다.
2차원 영상 시퀀스 입력값의 경우(2개 공간 차원의 픽셀, 채널, 관측값, 시간 스텝에 상응하는 5차원 데이터), 계층은 2개 공간 차원에 대해 컨벌루션합니다.
1차원 영상 시퀀스 입력값의 경우(1개 공간 차원의 픽셀, 채널, 관측값, 시간 스텝에 상응하는 4차원 데이터), 계층은 공간 차원과 시간 차원에 대해 컨벌루션합니다.
컨벌루션 계층은 다양한 컴포넌트로 구성됩니다.1
컨벌루션 계층은 입력 영상 또는 직전 계층의 출력값의 부분 영역에 연결되는 뉴런으로 이루어집니다. 이 계층은 영상을 스캔하면서 이러한 영역에 국한된 특징을 학습합니다. convolution2dLayer
함수를 사용하여 계층을 만들 때 filterSize
입력 인수를 사용하여 이러한 영역의 크기를 지정할 수 있습니다.
이 계층은 각 영역에 대해 가중치와 입력값의 내적을 계산하고 편향 항을 더합니다. 영상의 영역에 적용되는 가중치 세트를 필터라고 합니다. 필터는 각 영역에 대해 동일한 계산을 반복하면서 입력 영상의 세로와 가로 방향을 따라 이동합니다. 즉, 필터는 입력값을 컨벌루션합니다.
아래 영상은 3×3 필터가 입력값을 스캔하는 것을 보여줍니다. 아래쪽 맵은 입력값을, 위쪽 맵은 출력값을 나타냅니다.
필터가 이동하는 스텝 크기를 스트라이드라고 합니다. 스텝 크기는 Stride
이름-값 쌍 인수를 사용하여 지정할 수 있습니다. 뉴런이 연결되는 국소 영역은 filterSize
와 'Stride'
값에 따라 중첩될 수 있습니다.
아래 영상은 3×3 필터가 스트라이드 2로 입력값을 스캔하는 것을 보여줍니다. 아래쪽 맵은 입력값을, 위쪽 맵은 출력값을 나타냅니다.
필터에 있는 가중치의 개수는 h * w * c입니다. 여기서 h는 필터의 높이이고, w는 필터의 너비이고 c는 입력값에 있는 채널의 개수입니다. 예를 들어, 입력값이 컬러 영상인 경우, 색 채널의 개수는 3입니다. 필터의 개수는 컨벌루션 계층이 출력하는 채널의 개수를 결정합니다. 필터의 개수는 convolution2dLayer
함수에서 numFilters
인수를 사용하여 지정합니다.
팽창된 컨벌루션은 필터의 요소 사이에 삽입된 공간으로 인해 필터가 확장된 컨벌루션입니다. 팽창 인자는 'DilationFactor'
속성을 사용하여 지정합니다.
파라미터의 개수나 연산량을 늘리지 않으면서 계층의 수용 영역(입력값에서 계층이 볼 수 있는 영역)을 늘리려는 경우 팽창된 컨벌루션을 사용할 수 있습니다.
이 계층은 각 필터 요소 사이에 0을 삽입하여 필터를 확장합니다. 팽창 인자는 입력값 추출을 위한 스텝 크기 또는 이와 동등한 필터 업샘플링 인자를 결정합니다. 팽창 인자에 따라 필터 크기가 (Filter Size – 1) .* Dilation Factor + 1로 정해집니다. 예를 들어, 팽창 인자가 [2 2]
인 3×3 필터는 요소들 사이에 0이 삽입된 5×5 필터와 같습니다.
아래 영상은 2배만큼 팽창된 3×3 필터가 입력값을 스캔하는 것을 보여줍니다. 아래쪽 맵은 입력값을, 위쪽 맵은 출력값을 나타냅니다.
입력값을 따라 이동하는 필터는 컨벌루션에 대해 동일한 가중치 세트와 동일한 편향을 사용하여 특징 맵을 형성합니다. 각 특징 맵은 서로 다른 가중치와 서로 다른 편향을 사용한 컨벌루션의 결과입니다. 따라서 특징 맵의 개수는 필터의 개수와 같습니다. 컨벌루션 계층의 파라미터의 총 개수는 ((h*w*c + 1)*Number of Filters)입니다. 여기서 1은 편향입니다.
'Padding'
이름-값 쌍 인수를 사용하여 입력 영상 테두리에 세로와 가로 방향으로 채우기를 적용할 수도 있습니다. 채우기는 입력값 크기를 늘리기 위해 입력값 테두리에 추가되는 값입니다. 채우기를 조정하여 계층의 출력 크기를 제어할 수 있습니다.
아래 영상은 3×3 필터가 채우기 크기 1이 적용된 입력값을 스캔하는 것을 보여줍니다. 아래쪽 맵은 입력값을, 위쪽 맵은 출력값을 나타냅니다.
컨벌루션 계층의 출력 높이와 너비는 (Input Size – ((Filter Size – 1)*Dilation Factor + 1) + 2*Padding)/Stride + 1입니다. 전체 영상을 완전히 덮으려면 이 값은 정수여야 합니다. 이러한 옵션을 조합한 결과로 영상을 완전히 덮을 수 없게 되는 경우, 영상의 오른쪽과 아래 가장자리를 따라 남는 부분이 기본적으로 컨벌루션에서 무시됩니다.
출력 높이와 너비를 곱하면 특징 맵에 있는 뉴런의 총 개수 Map Size가 나옵니다. 컨벌루션 계층의 뉴런의 총 개수(출력 크기)는 Map Size*Number of Filters입니다.
예를 들어, 입력 영상이 32×32×3 컬러 영상이라고 가정하겠습니다. 필터가 8개이고 필터 크기가 5×5인 컨벌루션 계층의 필터당 가중치 개수는 5 * 5 * 3 = 75이고, 계층의 파라미터의 총 개수는 (75 + 1) * 8 = 608입니다. 스트라이드가 각 방향에서 2이고, 크기가 2인 채우기를 지정하면 각 특징 맵은 16×16 크기를 가집니다. (32 – 5 + 2 * 2)/2 + 1 = 16.5인데 영상의 오른쪽과 아래쪽의 가장 바깥에 더해진 채우기 중 일부가 버려졌기 때문입니다. 마지막으로, 계층의 뉴런의 총 개수는 16 * 16 * 8 = 2048입니다.
이러한 뉴런으로부터 얻어진 결과는 보통 ReLU(Rectified Linear Unit)와 같은 비선형 형태를 통과합니다.
컨벌루션 계층을 정의할 때 이름-값 쌍 인수를 사용하여 계층의 학습률과 정규화 옵션을 조정할 수 있습니다. 이러한 옵션을 지정하지 않은 경우, trainnet
함수는 trainingOptions
함수로 정의된 전역 훈련 옵션을 사용합니다.
컨벌루션 신경망은 하나 또는 여러 개의 컨벌루션 계층으로 이루어질 수 있습니다. 컨벌루션 계층의 개수는 데이터의 양과 복잡도에 따라 달라집니다.
계층 입력 형식 및 출력 형식
계층 배열 또는 계층 그래프의 계층은 뒤에 오는 계층에 데이터를 전달할 때 형식이 지정된 dlarray
객체로 전달합니다. dlarray
객체의 형식은 문자들로 구성된 문자열로, 각 문자는 데이터의 대응되는 차원을 설명합니다. 형식은 다음 문자 중 하나 이상으로 구성됩니다.
"S"
— 공간"C"
— 채널"B"
— 배치"T"
— 시간"U"
— 지정되지 않음
4차원 배열로 표현되는 2차원 영상 데이터를 예로 들면 처음 2개 차원은 영상의 공간 차원, 3번째 차원은 영상의 채널, 4번째 차원은 배치 차원에 대응되며, "SSCB"
(공간, 공간, 채널, 배치) 형식으로 설명될 수 있습니다.
functionLayer
객체를 사용하여 사용자 지정 계층을 개발하거나, dlnetwork
객체에 forward
및 predict
함수를 사용하는 경우와 같은 자동 미분 워크플로에서 이러한 dlarray
객체와 상호 작용할 수 있습니다.
이 표는 Convolution2DLayer
객체의 지원되는 입력 형식과 그에 대응되는 출력 형식을 보여줍니다. 계층의 출력이 nnet.layer.Formattable
클래스를 상속하지 않는 사용자 지정 계층에 전달되거나 Formattable
속성을 0
(false
)으로 설정한 FunctionLayer
객체에 전달될 경우 이 계층은 이 표에 나와 있는 형식에 따라 순서가 지정된 차원을 갖는, 형식이 지정되지 않은 dlarray
객체를 수신합니다. 여기에 나와 있는 형식은 일부에 불과합니다. 계층은 다른 형식도 지원할 수 있습니다(예: 추가적인 "S"
(공간) 또는 "U"
(미지정) 차원을 갖는 형식).
입력 형식 | 출력 형식 |
---|---|
|
|
|
|
|
|
dlnetwork
객체에서 Convolution2DLayer
객체는 다음 입력 형식과 출력 형식의 결합도 지원합니다.
입력 형식 | 출력 형식 |
---|---|
|
|
|
|
|
|
참고 문헌
[1] LeCun, Y., B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel. "Handwritten Digit Recognition with a Back-Propagation Network." In Advances in Neural Information Processing Systems 2 (D. Touretzky, ed.). San Francisco: Morgan Kaufmann, 1990.
[2] LeCun, Y., L. Bottou, Y. Bengio, and P. Haffner. ''Gradient-Based Learning Applied to Document Recognition.'' Proceedings of the IEEE. Vol. 86, Number 11, 1998, pp. 2278–2324.
[3] Murphy, K. P. Machine Learning: A Probabilistic Perspective. Cambridge, MA: MIT Press, 2012.
[4] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010. https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
[5] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In 2015 IEEE International Conference on Computer Vision (ICCV), 1026–34. Santiago, Chile: IEEE, 2015. https://doi.org/10.1109/ICCV.2015.123
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
코드를 생성하려면
PaddingValue
파라미터는 디폴트 값인0
과 같아야 합니다.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
코드를 생성하려면
PaddingValue
파라미터는 디폴트 값인0
과 같아야 합니다.
버전 내역
R2016a에 개발됨R2019a: 디폴트 가중치 초기화는 Glorot
R2019a부터, 기본적으로 이 계층의 계층 가중치는 Glorot 이니셜라이저를 사용하여 초기화됩니다. 이 동작은 훈련을 안정화하는 데 도움이 되며, 일반적으로 심층 신경망의 훈련 시간을 줄여 줍니다.
이전 릴리스에서는 기본적으로 계층 가중치가 평균이 0이고 분산이 0.01인 정규분포에서 샘플링하여 초기화되었습니다. 이 동작을 재현하려면 계층의 'WeightsInitializer'
옵션을 'narrow-normal'
로 설정하십시오.
참고 항목
trainnet
| trainingOptions
| dlnetwork
| reluLayer
| batchNormalizationLayer
| maxPooling2dLayer
| fullyConnectedLayer
| groupedConvolution2dLayer
| 심층 신경망 디자이너
1 Image credit: Convolution arithmetic (License)
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)