이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

fullyConnectedLayer

완전 연결 계층

설명

완전 연결 계층은 입력값에 가중치 행렬을 곱한 다음 편향 벡터를 더합니다.

생성

설명

layer = fullyConnectedLayer(outputSize)는 완전 연결 계층을 반환하고 OutputSize 속성을 지정합니다.

예제

layer = fullyConnectedLayer(outputSize,Name,Value)는 이름-값 쌍을 사용하여 선택 사항인 파라미터 및 초기화, 학습률 및 정규화, Name 속성을 설정합니다. 예를 들어, fullyConnectedLayer(10,'Name','fc1')은 출력 크기가 10이고 이름이 'fc1'인 완전 연결 계층을 만듭니다. 여러 개의 이름-값 쌍을 지정할 수 있습니다. 각 속성 이름을 작은따옴표로 묶습니다.

속성

모두 확장

완전 연결

완전 연결 계층의 출력 크기로, 양의 정수로 지정됩니다.

예: 10

완전 연결 계층의 입력 크기로, 양의 정수 또는 'auto'로 지정됩니다. InputSize'auto'이면 훈련 중에 입력 크기가 자동으로 결정됩니다.

파라미터 및 초기화

가중치를 초기화하는 함수로, 다음 중 하나로 지정됩니다.

  • '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

편향을 초기화하는 함수로, 다음 중 하나로 지정됩니다.

  • 'zeros' – 편향을 0으로 초기화합니다.

  • 'ones' – 편향을 1로 초기화합니다.

  • 'narrow-normal' – 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 편향을 초기화합니다.

  • 함수 핸들 – 사용자 지정 함수를 사용하여 편향을 초기화합니다. 함수 핸들을 지정할 경우, 함수는 bias = func(sz) 형식이 되어야 합니다. 여기서 sz는 편향의 크기입니다.

계층은 Bias 속성이 비어 있는 경우에만 편향을 초기화합니다.

데이터형: char | string | function_handle

계층 가중치로, 행렬로 지정됩니다.

계층 가중치는 학습 가능한 파라미터입니다. 계층의 Weights 속성을 사용하여 가중치에 대한 초기값을 직접 지정할 수 있습니다. 네트워크를 훈련시킬 때 계층의 Weights 속성이 비어 있지 않으면 trainNetworkWeights 속성을 초기값으로 사용합니다. Weights 속성이 비어 있으면 trainNetwork는 계층의 WeightsInitializer 속성으로 지정된 이니셜라이저를 사용합니다.

훈련 시점에 WeightsOutputSizexInputSize 행렬입니다.

데이터형: single | double

계층 편향으로, 행렬로 지정됩니다.

계층 편향은 학습 가능한 파라미터입니다. 네트워크를 훈련시킬 때 Bias가 비어 있지 않으면 trainNetworkBias 속성을 초기값으로 사용합니다. Bias가 비어 있으면 trainNetworkBiasInitializer로 지정된 이니셜라이저를 사용합니다.

훈련 시점에 BiasOutputSizex1 행렬입니다.

데이터형: single | double

학습률 및 정규화

가중치에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 학습률을 곱하여 이 계층의 가중치에 대한 학습률이 결정됩니다. 예를 들어, WeightLearnRateFactor가 2인 경우, 이 계층의 가중치에 대한 학습률은 현재 전역 학습률의 2배입니다. 소프트웨어는 trainingOptions 함수로 지정된 설정을 기준으로 전역 학습률을 결정합니다.

예: 2

편향에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 학습률을 곱하여 이 계층의 편향에 대한 학습률이 결정됩니다. 예를 들어, BiasLearnRateFactor가 2인 경우, 이 계층의 편향에 대한 학습률은 현재 전역 학습률의 2배입니다. 소프트웨어는 trainingOptions 함수로 지정된 설정을 기준으로 전역 학습률을 결정합니다.

예: 2

가중치에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 L2 정규화 인자를 곱하여 이 계층의 가중치에 대한 L2 정규화가 결정됩니다. 예를 들어, WeightL2Factor가 2인 경우, 이 계층의 가중치에 대한 L2 정규화는 전역 L2 정규화의 2배입니다. 전역 L2 정규화 인자는 trainingOptions 함수를 사용하여 지정할 수 있습니다.

예: 2

편향에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 L2 정규화 인자를 곱하여 이 계층의 편향에 대한 L2 정규화가 결정됩니다. 예를 들어, BiasL2Factor가 2인 경우, 이 계층의 편향에 대한 L2 정규화는 전역 L2 정규화의 2배입니다. 전역 L2 정규화 인자는 trainingOptions 함수를 사용하여 지정할 수 있습니다.

예: 2

계층

계층 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 계층 그래프에 계층을 포함하려면 비어 있지 않은 고유한 계층 이름을 지정해야 합니다. 이 계층을 사용하여 시리즈 네트워크를 훈련시킬 때 Name''로 설정하면, 소프트웨어가 훈련 시점에 해당 계층에 자동으로 이름을 할당합니다.

데이터형: char | string

계층의 입력값 개수. 이 계층은 단일 입력값만 받습니다.

데이터형: double

계층의 입력값 이름. 이 계층은 단일 입력값만 받습니다.

데이터형: cell

계층의 출력값 개수. 이 계층은 단일 출력값만 가집니다.

데이터형: double

계층의 출력값 이름. 이 계층은 단일 출력값만 가집니다.

데이터형: cell

예제

모두 축소

출력 크기가 10이고 이름이 'fc1'인 완전 연결 계층을 만듭니다.

layer = fullyConnectedLayer(10,'Name','fc1')
layer = 
  FullyConnectedLayer with properties:

          Name: 'fc1'

   Hyperparameters
     InputSize: 'auto'
    OutputSize: 10

   Learnable Parameters
       Weights: []
          Bias: []

  Show all properties

Layer 배열에 완전 연결 계층을 포함시킵니다.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer]
layers = 
  7x1 Layer array with layers:

     1   ''   Image Input             28x28x1 images with 'zerocenter' normalization
     2   ''   Convolution             20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   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
     7   ''   Classification Output   crossentropyex

가중치 이니셜라이저 함수와 편향 이니셜라이저 함수를 지정하려면 각각 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: []

  Show 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: []

  Show all properties

이번에도 Weights 속성과 Bias 속성은 비어 있습니다. 이러한 속성은 지정된 초기화 함수를 사용하여 훈련 시점에 초기화됩니다.

가중치와 편향을 직접 지정하기

출력 크기가 10인 완전 연결 계층을 만들고, MAT 파일 FCWeights.mat에서 가중치와 편향을 각각 Wb로 설정합니다.

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]

  Show all properties

여기서는 Weights 속성과 Bias 속성에 지정된 값이 포함되어 있습니다. 이러한 속성이 비어 있지 않으면 지정된 값이 훈련 시점에 초기 가중치 및 편향으로 사용됩니다. 이 경우 소프트웨어가 이니셜라이저 함수를 사용하지 않습니다.

세부 정보

모두 확장

호환성 관련 고려 사항

모두 확장

R2019a에서 동작이 변경됨

참고 문헌

[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, pp. 249-256. 2010.

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving deep into rectifiers: Surpassing human-level performance on imagenet classification." In Proceedings of the IEEE international conference on computer vision, pp. 1026-1034. 2015.

[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks." arXiv preprint arXiv:1312.6120 (2013).

R2016a에 개발됨