주요 콘텐츠

quantizationDetails

신경망의 양자화 세부 정보 표시

R2022a 이후

설명

qDetails = quantizationDetails(net)은 신경망의 양자화 세부 정보를 포함하는 1×1 구조체형 배열을 반환합니다. 데이터는 다음 필드를 갖는 구조체로 반환됩니다.

  • IsQuantized — 신경망이 양자화되었으면 1(true)을 반환하고, 그렇지 않으면 0(false)을 반환함

  • TargetLibrary — 코드 생성을 위한 타깃 라이브러리

  • QuantizedLayerNames — 양자화된 계층 목록

  • QuantizedLearnables — 양자화된 신경망의 학습 가능한 파라미터

예제

예제

모두 축소

이 예제에서는 신경망의 양자화 세부 정보를 표시하는 방법을 보여줍니다.

사전 훈련된 신경망을 불러옵니다. netMerchData 데이터 세트의 영상을 분류하기 위해 전이 학습을 사용하여 재훈련된 SqueezeNet 컨벌루션 신경망입니다.

load squeezedlnetmerch
net
net = 
  dlnetwork with properties:

         Layers: [67×1 nnet.cnn.layer.Layer]
    Connections: [74×2 table]
     Learnables: [52×3 table]
          State: [0×3 table]
     InputNames: {'data'}
    OutputNames: {'prob'}
    Initialized: 1

  View summary with summary.

quantizationDetails 함수를 사용하여 신경망이 양자화되지 않았는지 확인합니다.

qDetails_original = quantizationDetails(net)
qDetails_original = struct with fields:
            IsQuantized: 0
          TargetLibrary: ""
    QuantizedLayerNames: [0×0 string]
    QuantizedLearnables: [0×3 table]

원래 신경망이 단정밀도 부동소수점 데이터형을 사용하므로 IsQuantized 필드는 0(false)을 반환합니다.

MerchData 영상의 압축을 풀고 영상 데이터저장소로 불러옵니다. augmentedImageDatastore 객체를 정의하여 신경망 데이터의 크기를 조정하고, 데이터를 양자화에 사용할 보정 데이터 세트와 검증 데이터 세트로 분할합니다.

unzip('MerchData.zip');
imds = imageDatastore('MerchData', ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');
[calData, valData] = splitEachLabel(imds, 0.7, 'randomized');
aug_calData = augmentedImageDatastore([227 227], calData);
aug_valData = augmentedImageDatastore([227 227], valData);

dlquantizer 객체를 만들고 양자화할 신경망을 지정합니다. 실행 환경을 MATLAB으로 설정합니다. MATLAB 실행 환경을 사용하면 fi 고정소수점 데이터형을 사용하여 양자화가 수행됩니다(Fixed-Point Designer™ 라이선스 필요).

quantObj = dlquantizer(net,'ExecutionEnvironment','MATLAB');

calibrate 함수를 사용하여 샘플 입력값으로 신경망을 실행하고 범위 정보를 수집합니다.

calResults = calibrate(quantObj,aug_calData);

quantize 메서드를 사용하여 신경망 객체를 양자화하고 시뮬레이션이 가능한 양자화된 신경망을 반환합니다.

qNet = quantize(quantObj)
qNet = 
  Quantized dlnetwork with properties:

         Layers: [67×1 nnet.cnn.layer.Layer]
    Connections: [74×2 table]
     Learnables: [52×3 table]
          State: [0×3 table]
     InputNames: {'data'}
    OutputNames: {'prob'}
    Initialized: 1

  View summary with summary.
  Use the quantizationDetails function to extract quantization details.

quantizationDetails 메서드를 사용하여 양자화 세부 정보를 추출합니다.

qDetails = quantizationDetails(qNet)
qDetails = struct with fields:
            IsQuantized: 1
          TargetLibrary: "none"
    QuantizedLayerNames: [56×1 string]
    QuantizedLearnables: [52×3 table]

QuantizedLayerNames 필드를 검사하여 양자화된 계층들의 목록을 확인합니다.

qDetails.QuantizedLayerNames
ans = 56×1 string
    "data"
    "conv1"
    "relu_conv1"
    "pool1"
    "fire2-squeeze1x1"
    "fire2-relu_squeeze1x1"
    "fire2-expand1x1"
    "fire2-relu_expand1x1"
    "fire2-expand3x3"
    "fire2-relu_expand3x3"
    "fire3-squeeze1x1"
    "fire3-relu_squeeze1x1"
    "fire3-expand1x1"
    "fire3-relu_expand1x1"
    "fire3-expand3x3"
    "fire3-relu_expand3x3"
    "fire4-squeeze1x1"
    "fire4-relu_squeeze1x1"
    "fire4-expand1x1"
    "fire4-relu_expand1x1"
    "fire4-expand3x3"
    "fire4-relu_expand3x3"
    "fire5-squeeze1x1"
    "fire5-relu_squeeze1x1"
    "fire5-expand1x1"
    "fire5-relu_expand1x1"
    "fire5-expand3x3"
    "fire5-relu_expand3x3"
    "fire6-squeeze1x1"
    "fire6-relu_squeeze1x1"
      ⋮

QuantizedLearnables 필드를 검사하여 신경망의 학습 가능한 파라미터들의 양자화된 값을 확인합니다.

qDetails.QuantizedLearnables
ans=52×3 table
          Layer           Parameter             Value          
    __________________    _________    ________________________

    "conv1"               "Weights"    {3×3×3×64   embedded.fi}
    "conv1"               "Bias"       {1×1×64     embedded.fi}
    "fire2-squeeze1x1"    "Weights"    {1×1×64×16  embedded.fi}
    "fire2-squeeze1x1"    "Bias"       {1×1×16     embedded.fi}
    "fire2-expand1x1"     "Weights"    {1×1×16×64  embedded.fi}
    "fire2-expand1x1"     "Bias"       {1×1×64     embedded.fi}
    "fire2-expand3x3"     "Weights"    {3×3×16×64  embedded.fi}
    "fire2-expand3x3"     "Bias"       {1×1×64     embedded.fi}
    "fire3-squeeze1x1"    "Weights"    {1×1×128×16 embedded.fi}
    "fire3-squeeze1x1"    "Bias"       {1×1×16     embedded.fi}
    "fire3-expand1x1"     "Weights"    {1×1×16×64  embedded.fi}
    "fire3-expand1x1"     "Bias"       {1×1×64     embedded.fi}
    "fire3-expand3x3"     "Weights"    {3×3×16×64  embedded.fi}
    "fire3-expand3x3"     "Bias"       {1×1×64     embedded.fi}
    "fire4-squeeze1x1"    "Weights"    {1×1×128×32 embedded.fi}
    "fire4-squeeze1x1"    "Bias"       {1×1×32     embedded.fi}
      ⋮

입력 인수

모두 축소

양자화된 신경망으로, dlnetwork, SeriesNetwork 또는 DAGNetwork 객체로 지정됩니다.

버전 내역

R2022a에 개발됨

모두 확장