Main Content

신경망 객체 만들기

이 항목은 신경망 설계를 위한 워크플로에서 설명하는 설계 워크플로의 일부입니다.

신경망을 만드는 가장 쉬운 방법은 신경망 생성 함수 중 하나를 사용하는 것입니다. 이를 확인하기 위해 명령 feedforwardnet을 사용하여 간단한 2계층 피드포워드 신경망을 만들어 볼 수 있습니다.

net = feedforwardnet
net =

Neural Network

              name: 'Feed-Forward Neural Network'
          userdata: (your custom info)

    dimensions:

         numInputs: 1
         numLayers: 2
        numOutputs: 1
    numInputDelays: 0
    numLayerDelays: 0
 numFeedbackDelays: 0
 numWeightElements: 10
        sampleTime: 1

    connections:

       biasConnect: [1; 1]
      inputConnect: [1; 0]
      layerConnect: [0 0; 1 0]
     outputConnect: [0 1]

    subobjects:

            inputs: {1x1 cell array of 1 input}
            layers: {2x1 cell array of 2 layers}
           outputs: {1x2 cell array of 1 output}
            biases: {2x1 cell array of 2 biases}
      inputWeights: {2x1 cell array of 1 weight}
      layerWeights: {2x2 cell array of 1 weight}

    functions:

          adaptFcn: 'adaptwb'
        adaptParam: (none)
          derivFcn: 'defaultderiv'
         divideFcn: 'dividerand'
       divideParam: .trainRatio, .valRatio, .testRatio
        divideMode: 'sample'
           initFcn: 'initlay'
        performFcn: 'mse'
      performParam: .regularization, .normalization
          plotFcns: {'plotperform', plottrainstate, ploterrhist,
                    plotregression}
        plotParams: {1x4 cell array of 4 params}
          trainFcn: 'trainlm'
        trainParam: .showWindow, .showCommandLine, .show, .epochs,
                    .time, .goal, .min_grad, .max_fail, .mu, .mu_dec,
                    .mu_inc, .mu_max

    weight and bias values:

                IW: {2x1 cell} containing 1 input weight matrix
                LW: {2x2 cell} containing 1 layer weight matrix
                 b: {2x1 cell} containing 2 bias vectors

    methods:

             adapt: Learn while in continuous use
         configure: Configure inputs & outputs
            gensim: Generate Simulink model
              init: Initialize weights & biases
           perform: Calculate performance
               sim: Evaluate network outputs given inputs
             train: Train network with examples
              view: View diagram
       unconfigure: Unconfigure inputs & outputs

    evaluate:       outputs = net(inputs)

이 표시 결과는 network 객체의 개요로, 신경망을 정의하는 모든 정보가 이 객체에 저장되어 있습니다. 여기에는 많은 세부 정보가 있는데 network 객체가 구성된 방식은 몇 가지 핵심 섹션에서 찾아볼 수 있습니다.

dimensions 섹션에는 신경망의 전체적인 구조가 저장되어 있습니다. 여기서는 신경망에 입력(층)이 1개 있고(이때 1개의 입력층은 여러 개의 요소를 포함하는 벡터일 수 있음) 출력(층)이 1개 있고 2개의 계층이 있는 것을 볼 수 있습니다.

connections 섹션에는 신경망 구성요소 간의 연결 상태가 저장되어 있습니다. 예를 들어, 각 계층에는 편향이 연결되어 있고, 입력은 계층 1에 연결되어 있고, 출력은 계층 2에서 나옵니다. 계층 1이 계층 2에 연결되어 있다는 것도 알 수 있습니다. (net.layerConnect의 행은 대상 계층을 나타내고, 열은 소스 계층을 나타냅니다. 이 행렬에서 1은 연결을 나타내고 0은 연결 없음을 나타냅니다. 이 예제에서는 행렬의 (2,1) 요소에만 1이 있습니다.)

network 객체의 주요 하위객체는 inputs, layers, outputs, biases, inputWeights, layerWeights입니다. 다음 명령을 사용하여 첫 번째 계층에 대해 layers 하위객체를 확인합니다.

net.layers{1}
Neural Network Layer

              name: 'Hidden'
        dimensions: 10
       distanceFcn: (none)
     distanceParam: (none)
         distances: []
           initFcn: 'initnw'
       netInputFcn: 'netsum'
     netInputParam: (none)
         positions: []
             range: [10x2 double]
              size: 10
       topologyFcn: (none)
       transferFcn: 'tansig'
     transferParam: (none)
          userdata: (your custom info)

계층에 있는 뉴런 개수는 size 속성에 지정됩니다. 여기서는 계층에 10개의 뉴런이 있으며, 이는 feedforwardnet 명령의 디폴트 크기입니다. 순 입력 함수는 netsum(합계)이고 전달 함수는 tansig입니다. 전달 함수를 예를 들어 logsig로 변경하려면 다음 명령을 실행할 수 있습니다.

net.layers{1}.transferFcn = 'logsig';

계층 1과 계층 2 사이의 가중치에 대한 layerWeights 하위객체를 확인하려면 다음 명령을 사용하십시오.

net.layerWeights{2,1}
Neural Network Weight

            delays: 0
           initFcn: (none)
        initConfig: .inputSize
             learn: true
          learnFcn: 'learngdm'
        learnParam: .lr, .mc
              size: [0 10]
         weightFcn: 'dotprod'
       weightParam: (none)
          userdata: (your custom info)

가중치 함수는 dotprod입니다. 이는 표준 행렬 곱셈(내적)을 나타냅니다. 이 계층 가중치의 크기는 0×10입니다. 행이 0개인 이유는 신경망이 아직 특정 데이터 세트에 대해 구성되지 않았기 때문입니다. 출력 뉴런의 개수는 목표 벡터의 행 개수와 동일합니다. 구성 단계에서 사용자가 신경망에 샘플 입력값과 목표값을 제공하게 되며, 그런 후 출력 뉴런 개수가 할당될 수 있습니다.

지금까지 network 객체가 구성되는 방식을 살펴보았습니다. 여러 활용 분야에서, network 객체는 신경망 생성 함수가 처리하므로 network 객체를 직접 변경하기 위해 고민하지 않아도 됩니다. 시스템 디폴트 값을 재정의하고자 하는 경우에만 network 객체에 직접 액세스해야 합니다. 다른 항목에서 특정 신경망과 훈련 방법에 대해 이 작업을 수행하는 방법을 볼 수 있습니다.

network 객체를 더 자세히 조사하려고 할 경우, 위에 제시된 것과 같은 객체 내역에 각 하위객체에 대한 지원을 제공하는 링크가 포함된 것을 보게 될 수 있습니다. 링크를 클릭하면 객체에서 관심 있는 부분을 선택적으로 조사할 수 있습니다.