이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
fullyConnectedLayer
완전 연결 계층
설명
완전 연결 계층은 입력값에 가중치 행렬을 곱한 다음 편향 벡터를 더합니다.
생성
설명
는 완전 연결 계층을 반환하고 layer
= fullyConnectedLayer(outputSize
)OutputSize
속성을 지정합니다.
는 이름-값 쌍을 사용하여 선택 사항인 파라미터 및 초기화, 학습률 및 정규화, layer
= fullyConnectedLayer(outputSize
,Name,Value
)Name
속성을 설정합니다. 예를 들어, fullyConnectedLayer(10,'Name','fc1')
은 출력 크기가 10이고 이름이 'fc1'
인 완전 연결 계층을 만듭니다. 여러 개의 이름-값 쌍을 지정할 수 있습니다. 각 속성 이름을 작은따옴표로 묶습니다.
속성
완전 연결
OutputSize
— 출력 크기
양의 정수
완전 연결 계층의 출력 크기로, 양의 정수로 지정됩니다.
예: 10
InputSize
— 입력 크기
'auto'
(디폴트 값) | 양의 정수
완전 연결 계층의 입력 크기로, 양의 정수 또는 'auto'
로 지정됩니다. InputSize
가 'auto'
이면 훈련 중에 입력 크기가 자동으로 결정됩니다.
파라미터 및 초기화
WeightsInitializer
— 가중치를 초기화하는 함수
'glorot'
(디폴트 값) | 'he'
| 'orthogonal'
| 'narrow-normal'
| 'zeros'
| 'ones'
| 함수 핸들
가중치를 초기화하는 함수로, 다음 중 하나로 지정됩니다.
'glorot'
– Glorot 이니셜라이저[1](Xavier 이니셜라이저라고도 함)를 사용하여 가중치를 초기화합니다. Glorot 이니셜라이저는 평균이 0이고 분산이2/(InputSize + OutputSize)
인 균등분포에서 독립적으로 샘플링합니다.'he'
– He 이니셜라이저[2]를 사용하여 가중치를 초기화합니다. He 이니셜라이저는 평균이 0이고 분산이2/InputSize
인 정규분포에서 샘플링합니다.'orthogonal'
– 단위 정규분포에서 샘플링된 확률 행렬 Z에 대한 Z = QR의 QR 분해로 주어지는 직교 행렬 Q를 사용하여 입력 가중치를 초기화합니다[3].'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
는 OutputSize
×InputSize
행렬입니다.
데이터형: single
| double
Bias
— 계층 편향
[]
(디폴트 값) | 행렬
계층 편향으로, 행렬로 지정됩니다.
계층 편향은 학습 가능한 파라미터입니다. 신경망을 훈련시킬 때 Bias
가 비어 있지 않으면 trainnet
및 trainNetwork
함수는 Bias
속성을 초기값으로 사용합니다. Bias
가 비어 있으면 BiasInitializer
로 지정된 이니셜라이저가 사용됩니다.
훈련 시점에 Bias
는 OutputSize
×1
행렬입니다.
데이터형: 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
예제
완전 연결 계층 만들기
출력 크기가 10이고 이름이 fc1
인 완전 연결 계층을 만듭니다.
layer = fullyConnectedLayer(10,Name="fc1")
layer = FullyConnectedLayer with properties: Name: 'fc1' Hyperparameters InputSize: 'auto' OutputSize: 10 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
속성을 사용하십시오.
초기화 함수 지정하기
출력 크기가 10인 완전 연결 계층을 만들고 가중치 이니셜라이저를 He 이니셜라이저로 지정합니다.
outputSize = 10; layer = fullyConnectedLayer(outputSize,'WeightsInitializer','he')
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 'auto' OutputSize: 10 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
Weights
속성과 Bias
속성은 비어 있는 것을 볼 수 있습니다. 이러한 속성은 지정된 초기화 함수를 사용하여 훈련 시점에 초기화됩니다.
사용자 지정 초기화 함수 지정하기
가중치와 편향에 대해 자신만의 고유한 초기화 함수를 지정하려면 WeightsInitializer
속성과 BiasInitializer
속성을 함수 핸들로 설정하십시오. 이러한 속성에 대해, 가중치와 편향의 크기를 입력값으로 받고 초기화된 값을 출력하는 함수 핸들을 지정합니다.
출력 크기가 10인 완전 연결 계층을 만들고, 표준편차가 0.0001인 가우스 분포에서 가중치와 편향을 샘플링하는 이니셜라이저를 지정합니다.
outputSize = 10; weightsInitializationFcn = @(sz) rand(sz) * 0.0001; biasInitializationFcn = @(sz) rand(sz) * 0.0001; layer = fullyConnectedLayer(outputSize, ... 'WeightsInitializer',@(sz) rand(sz) * 0.0001, ... 'BiasInitializer',@(sz) rand(sz) * 0.0001)
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 'auto' OutputSize: 10 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
이번에도 Weights
속성과 Bias
속성은 비어 있습니다. 이러한 속성은 지정된 초기화 함수를 사용하여 훈련 시점에 초기화됩니다.
가중치와 편향을 직접 지정하기
출력 크기가 10인 완전 연결 계층을 만들고, MAT 파일 FCWeights.mat
에서 가중치와 편향을 각각 W
와 b
로 설정합니다.
outputSize = 10; load FCWeights layer = fullyConnectedLayer(outputSize, ... 'Weights',W, ... 'Bias',b)
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 720 OutputSize: 10 Learnable Parameters Weights: [10x720 double] Bias: [10x1 double] Use properties method to see a list of all properties.
여기서는 Weights
속성과 Bias
속성에 지정된 값이 포함되어 있습니다. 이러한 속성이 비어 있지 않으면 지정된 값이 훈련 시점에 초기 가중치 및 편향으로 사용됩니다. 이 경우 소프트웨어가 이니셜라이저 함수를 사용하지 않습니다.
알고리즘
완전 연결 계층
완전 연결 계층은 입력값에 가중치 행렬을 곱한 다음 편향 벡터를 더합니다.
이름에서 알 수 있듯이 완전 연결 계층의 모든 뉴런은 직전 계층의 모든 뉴런에 연결됩니다. 이 계층은 이전 계층이 영상에서 학습한 특징(국소 정보)들을 조합하여 보다 큰 패턴을 식별합니다. 분류 문제의 경우, 마지막 완전 연결 계층은 특징들을 조합하여 영상을 분류합니다. 이러한 동작으로 인해 신경망의 마지막 완전 연결 계층의 outputSize
인수가 데이터 세트의 클래스 개수와 같게 됩니다. 회귀 문제의 경우, 출력 크기는 응답 변수의 개수와 같아야 합니다.
완전 연결 계층을 만들 때 관련 이름-값 쌍 인수를 사용하여 계층의 학습률과 정규화 파라미터를 조정할 수도 있습니다. 이러한 파라미터를 조정하지 않은 경우, trainingOptions
함수로 정의된 전역 훈련 파라미터가 사용됩니다.
계층의 입력값이 시퀀스인 경우(예: LSTM 신경망), 완전 연결 계층은 각 시간 스텝에서 독립적으로 동작합니다. 예를 들어, 완전 연결 계층의 직전 계층이 크기가 D×N×S인 배열 X를 출력하는 경우, 완전 연결 계층은 크기가 outputSize
×N×S인 배열 Z를 출력합니다. 시간 스텝 t에서 Z의 대응되는 요소는 입니다. 여기서 는 X의 시간 스텝 t를 나타냅니다.
완전 연결 계층이 출력값을 평탄화합니다. 이 계층은 채널 차원에서 공간 데이터를 인코딩하고 출력값의 공간 차원을 제거합니다.
계층 입력 형식 및 출력 형식
계층 배열 또는 계층 그래프의 계층은 뒤에 오는 계층에 데이터를 전달할 때 형식이 지정된 dlarray
객체로 전달합니다. dlarray
객체의 형식은 문자들로 구성된 문자열로, 각 문자는 데이터의 대응되는 차원을 설명합니다. 형식은 다음 문자 중 하나 이상으로 구성됩니다.
"S"
— 공간"C"
— 채널"B"
— 배치"T"
— 시간"U"
— 지정되지 않음
4차원 배열로 표현되는 2차원 영상 데이터를 예로 들면 처음 2개 차원은 영상의 공간 차원, 3번째 차원은 영상의 채널, 4번째 차원은 배치 차원에 대응되며, "SSCB"
(공간, 공간, 채널, 배치) 형식으로 설명될 수 있습니다.
functionLayer
객체를 사용하여 사용자 지정 계층을 개발하거나, dlnetwork
객체에 forward
및 predict
함수를 사용하는 경우와 같은 자동 미분 워크플로에서 이러한 dlarray
객체와 상호 작용할 수 있습니다.
이 표는 FullyConnectedLayer
객체의 지원되는 입력 형식과 그에 대응되는 출력 형식을 보여줍니다. 계층의 출력이 nnet.layer.Formattable
클래스를 상속하지 않는 사용자 지정 계층에 전달되거나 Formattable
속성을 0
(false
)으로 설정한 FunctionLayer
객체에 전달될 경우 이 계층은 이 표에 나와 있는 형식에 따라 순서가 지정된 차원을 갖는, 형식이 지정되지 않은 dlarray
객체를 수신합니다. 여기에 나와 있는 형식은 일부에 불과합니다. 계층은 다른 형식도 지원할 수 있습니다(예: 추가적인 "S"
(공간) 또는 "U"
(미지정) 차원을 갖는 형식).
입력 형식 | 출력 형식 |
---|---|
|
|
| |
| |
| |
|
|
|
|
| |
| |
|
|
| |
| |
|
|
| |
| |
|
참고 문헌
[1] 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
[2] 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
[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact Solutions to the Nonlinear Dynamics of Learning in Deep Linear Neural Networks.” Preprint, submitted February 19, 2014. https://arxiv.org/abs/1312.6120.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
버전 내역
R2016a에 개발됨R2024a: DAGNetwork
객체와 SeriesNetwork
객체는 권장되지 않음
R2024a부터 DAGNetwork
객체와 SeriesNetwork
객체는 권장되지 않습니다. 대신 dlnetwork
객체를 사용하십시오.
DAGNetwork
객체와 SeriesNetwork
객체에 대한 지원을 제거할 계획은 없습니다. 하지만 다음과 같은 이점이 있는 dlnetwork
객체가 대신 권장됩니다.
dlnetwork
객체는 신경망 구축, 예측, 기본 제공 훈련, 시각화, 압축, 검증 및 사용자 지정 훈련 루프를 지원하는 통합 데이터형입니다.dlnetwork
객체는 외부 플랫폼에서 만들거나 가져올 수 있는 더 넓은 범위의 신경망 아키텍처를 지원합니다.dlnetwork
객체는trainnet
함수에서 지원되기 때문에 손실 함수를 쉽게 지정할 수 있습니다. 내장 손실 함수 중에서 선택하거나 사용자 지정 손실 함수를 지정할 수 있습니다.일반적으로
dlnetwork
객체를 사용한 훈련과 예측이LayerGraph
와trainNetwork
를 사용하는 워크플로보다 더 빠릅니다.
훈련된 DAGNetwork
또는 SeriesNetwork
객체를 dlnetwork
객체로 변환하려면 dag2dlnetwork
함수를 사용하십시오.
완전 연결 계층은 DAGNetwork
객체 및 SeriesNetwork
객체와 비교할 때 dlnetwork
객체에서 약간 다르게 동작합니다. 완전 연결 계층이 출력값을 평탄화합니다. 이 계층은 출력 데이터의 형태를 변경하여 채널 차원에서 공간 데이터를 인코딩합니다. SeriesNetwork
객체와 DAGNetwork
객체의 완전 연결 계층은 크기가 1인 공간 차원을 갖는 데이터를 출력하여 입력값과 같은 개수의 공간 차원을 갖는 데이터를 출력합니다. dlnetwork
객체의 완전 연결 계층은 출력값의 공간 차원을 제거합니다.
R2019a: 디폴트 가중치 초기화는 Glorot
R2019a부터, 기본적으로 이 계층의 계층 가중치는 Glorot 이니셜라이저를 사용하여 초기화됩니다. 이 동작은 훈련을 안정화하는 데 도움이 되며, 일반적으로 심층 신경망의 훈련 시간을 줄여 줍니다.
이전 릴리스에서는 기본적으로 계층 가중치가 평균이 0이고 분산이 0.01인 정규분포에서 샘플링하여 초기화되었습니다. 이 동작을 재현하려면 계층의 'WeightsInitializer'
옵션을 'narrow-normal'
로 설정하십시오.
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)