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

사전 훈련된 Keras 계층에서 네트워크 조합하기

이 예제에서는 사전 훈련된 Keras 네트워크에서 계층을 가져오고 지원되지 않는 계층을 사용자 지정 계층으로 바꾼 다음 이러한 계층을 예측을 실행할 준비가 된 네트워크로 조합하는 방법을 보여줍니다.

Keras 네트워크 가져오기

Keras 네트워크 모델에서 계층을 가져옵니다. 'digitsDAGnetwithnoise.h5'의 네트워크는 숫자 이미지를 분류합니다.

filename = 'digitsDAGnetwithnoise.h5';
lgraph = importKerasLayers(filename,'ImportWeights',true);
Warning: Unable to import some Keras layers, because they are not yet supported by the Deep Learning Toolbox. They have been replaced by placeholder layers. To find these layers, call the function findPlaceholderLayers on the returned object.

Keras 네트워크는 Deep Learning Toolbox에서 지원하지 않는 몇몇 계층을 포함합니다. importKerasLayers 함수는 경고를 표시하고 지원되지 않는 계층을 자리 표시자 계층으로 바꿉니다.

plot을 사용하여 계층 그래프를 플로팅합니다.

figure
plot(lgraph)
title("Imported Network")

자리 표시자 계층 바꾸기

자리 표시자 계층을 바꾸려면 먼저 바꾸려는 계층의 이름을 식별하십시오. findPlaceholderLayers를 사용하여 자리 표시자 계층을 찾습니다.

placeholderLayers = findPlaceholderLayers(lgraph)
placeholderLayers = 
  2x1 PlaceholderLayer array with layers:

     1   'gaussian_noise_1'   PLACEHOLDER LAYER   Placeholder for 'GaussianNoise' Keras layer
     2   'gaussian_noise_2'   PLACEHOLDER LAYER   Placeholder for 'GaussianNoise' Keras layer

이러한 계층의 Keras 구성을 표시합니다.

placeholderLayers.KerasConfiguration
ans = struct with fields:
    trainable: 1
         name: 'gaussian_noise_1'
       stddev: 1.5000

ans = struct with fields:
    trainable: 1
         name: 'gaussian_noise_2'
       stddev: 0.7000

사용자 지정 가우스 잡음 계층을 정의합니다. 이 계층을 만들려면 파일 gaussianNoiseLayer.m을 현재 폴더에 저장하십시오. 그런 다음 가져온 Keras 계층과 같은 구성을 갖는 가우스 잡음 계층을 2개 만듭니다.

gnLayer1 = gaussianNoiseLayer(1.5,'new_gaussian_noise_1');
gnLayer2 = gaussianNoiseLayer(0.7,'new_gaussian_noise_2');

replaceLayer를 사용하여 자리 표시자 계층을 사용자 지정 계층으로 바꿉니다.

lgraph = replaceLayer(lgraph,'gaussian_noise_1',gnLayer1);
lgraph = replaceLayer(lgraph,'gaussian_noise_2',gnLayer2);

plot을 사용하여 업데이트된 계층 그래프를 플로팅합니다.

figure
plot(lgraph)
title("Network with Replaced Layers")

클래스 이름 지정하기

가져온 분류 계층이 클래스를 포함하지 않는 경우, 예측을 실행하기 전에 먼저 클래스를 지정해야 합니다. 클래스를 지정하지 않으면 클래스가 자동으로 1, 2, ..., N으로 설정됩니다. 여기서 N은 클래스의 개수입니다.

계층 그래프의 Layers 속성을 확인하여 분류 계층의 인덱스를 찾습니다.

lgraph.Layers
ans = 
  15x1 Layer array with layers:

     1   'input_1'                            Image Input             28x28x1 images
     2   'conv2d_1'                           Convolution             20 7x7x1 convolutions with stride [1  1] and padding 'same'
     3   'conv2d_1_relu'                      ReLU                    ReLU
     4   'conv2d_2'                           Convolution             20 3x3x1 convolutions with stride [1  1] and padding 'same'
     5   'conv2d_2_relu'                      ReLU                    ReLU
     6   'new_gaussian_noise_1'               Gaussian Noise          Gaussian noise with standard deviation 1.5
     7   'new_gaussian_noise_2'               Gaussian Noise          Gaussian noise with standard deviation 0.7
     8   'max_pooling2d_1'                    Max Pooling             2x2 max pooling with stride [2  2] and padding 'same'
     9   'max_pooling2d_2'                    Max Pooling             2x2 max pooling with stride [2  2] and padding 'same'
    10   'flatten_1'                          Flatten C-style         Flatten activations into 1D assuming C-style (row-major) order
    11   'flatten_2'                          Flatten C-style         Flatten activations into 1D assuming C-style (row-major) order
    12   'concatenate_1'                      Depth concatenation     Depth concatenation of 2 inputs
    13   'dense_1'                            Fully Connected         10 fully connected layer
    14   'activation_1'                       Softmax                 softmax
    15   'ClassificationLayer_activation_1'   Classification Output   crossentropyex

분류 계층의 이름은 'ClassificationLayer_activation_1'입니다. 분류 계층을 표시하고 Classes 속성을 확인합니다.

cLayer = lgraph.Layers(end)
cLayer = 
  ClassificationOutputLayer with properties:

            Name: 'ClassificationLayer_activation_1'
         Classes: 'auto'
      OutputSize: 'auto'

   Hyperparameters
    LossFunction: 'crossentropyex'

계층의 Classes 속성이 'auto'이므로 클래스를 수동으로 지정해야 합니다. 클래스를 0, 1, ..., 9로 설정한 다음 가져온 분류 계층을 새로운 분류 계층으로 바꿉니다.

cLayer.Classes = string(0:9)
cLayer = 
  ClassificationOutputLayer with properties:

            Name: 'ClassificationLayer_activation_1'
         Classes: [0    1    2    3    4    5    6    7    8    9]
      OutputSize: 10

   Hyperparameters
    LossFunction: 'crossentropyex'

lgraph = replaceLayer(lgraph,'ClassificationLayer_activation_1',cLayer);

네트워크 조합하기

assembleNetwork를 사용하여 계층 그래프를 조합합니다. 함수가 예측을 실행할 준비가 된 DAGNetwork 객체를 반환합니다.

net = assembleNetwork(lgraph)
net = 
  DAGNetwork with properties:

         Layers: [15×1 nnet.cnn.layer.Layer]
    Connections: [15×2 table]

참고 항목

| | | | | | |

관련 항목