Main Content

exportONNXNetwork

신경망을 ONNX 모델 형식으로 내보내기

설명

예제

exportONNXNetwork(net,filename)은 딥러닝 신경망 net을 가중치와 함께 ONNX™ 형식 파일 filename으로 내보냅니다. filename이 존재하는 경우 exportONNXNetwork 함수는 파일을 덮어씁니다.

이 함수를 사용하려면 Deep Learning Toolbox™ Converter for ONNX Model Format 지원 패키지가 필요합니다. 이 지원 패키지가 설치되어 있지 않으면 함수에서 다운로드 링크를 제공합니다.

exportONNXNetwork(net,filename,Name=Value)는 하나 이상의 이름-값 인수로 지정된 추가 옵션을 사용하여 신경망을 내보냅니다.

예제

모두 축소

사전 훈련된 SqueezeNet 컨벌루션 신경망을 불러옵니다.

net = squeezenet
net = 
  DAGNetwork with properties:

         Layers: [68×1 nnet.cnn.layer.Layer]
    Connections: [75×2 table]
     InputNames: {'data'}
    OutputNames: {'ClassificationLayer_predictions'}

신경망 netsqueezenet.onnx라는 ONNX 형식의 파일로 내보냅니다. 이 파일을 현재 폴더에 저장합니다. Deep Learning Toolbox Converter for ONNX Model Format 지원 패키지가 설치되어 있지 않은 경우, exportONNXNetwork는 필요한 지원 패키지로 연결되는 애드온 탐색기 링크를 제공합니다. 지원 패키지를 설치하려면 링크를 클릭한 다음 설치를 클릭하십시오.

filename = "squeezenet.onnx";
exportONNXNetwork(net,filename)

이제 ONNX 가져오기를 지원하는 모든 딥러닝 프레임워크로 squeezenet.onnx 파일을 가져올 수 있습니다.

exportONNXNetwork를 사용하여 ONNX 형식에 대한 출력 계층을 포함하거나 포함하지 않고 계층 그래프를 내보냅니다.

사전 훈련된 SqueezeNet 컨벌루션 신경망을 불러오고 사전 훈련된 신경망을 계층 그래프로 변환합니다.

net = squeezenet;
lgraph1 = layerGraph(net)
lgraph1 = 
  LayerGraph with properties:

         Layers: [68×1 nnet.cnn.layer.Layer]
    Connections: [75×2 table]
     InputNames: {'data'}
    OutputNames: {'ClassificationLayer_predictions'}

계층 그래프를 분석합니다. analyzeNetwork는 신경망 아키텍처에 대한 대화형 방식의 플롯과 신경망 계층에 대한 정보를 포함하는 표를 표시합니다. ONNX 형식으로 내보내기 전에 계층 그래프 lgraph1에서 오류와 문제를 검출할 수도 있습니다. lgraph1은 오류가 없습니다.

analyzeNetwork(lgraph1)

analyzeLgraph1.png

계층 그래프 lgraph1을 현재 폴더에 squeezeLayers1.onnx라는 이름의 ONNX 형식 파일로 내보냅니다.

exportONNXNetwork(lgraph1,"squeezeLayers1.onnx")

이제 ONNX 가져오기를 지원하는 모든 딥러닝 프레임워크로 squeezeLayers1.onnx 파일을 가져올 수 있습니다.

lgraph1의 출력 계층을 제거합니다.

lgraph2 = removeLayers(lgraph1,lgraph1.Layers(end).Name)
lgraph2 = 
  LayerGraph with properties:

         Layers: [67×1 nnet.cnn.layer.Layer]
    Connections: [74×2 table]
     InputNames: {'data'}
    OutputNames: {1×0 cell}

analyzeNetwork를 사용하여 계층 그래프 lgraph2를 분석합니다. 계층 그래프 분석은 누락된 출력 계층과 연결되지 않은 출력을 검출합니다. 여전히 lgraph2를 ONNX 형식으로 내보낼 수 있습니다.

analyzeNetwork(lgraph2)

analyzeLgraph2.png

계층 그래프 lgraph2를 현재 폴더에 squeezeLayers2.onnx라는 이름의 ONNX 형식 파일로 내보냅니다.

exportONNXNetwork(lgraph2,"squeezeLayers2.onnx")

이제 ONNX 가져오기를 지원하는 모든 딥러닝 프레임워크로 squeezeLayers2.onnx 파일을 가져올 수 있습니다.

입력 인수

모두 축소

훈련된 신경망 또는 신경망 계층의 그래프로, SeriesNetwork 객체, DAGNetwork 객체, dlnetwork 객체 또는 LayerGraph 객체로 지정됩니다.

훈련된 신경망(SeriesNetwork, DAGNetwork 또는 dlnetwork)은 다음과 같은 방법으로 얻을 수 있습니다.

  • 사전 훈련된 신경망을 가져옵니다. 예를 들어, googlenet 함수를 사용합니다.

  • 신경망을 훈련시킵니다. SeriesNetwork 또는 DAGNetwork를 훈련시키려면 trainNetwork를 사용합니다. dlnetwork를 훈련시키려면 사용자 지정 훈련 루프를 사용합니다.

LayerGraph 객체는 신경망 계층의 그래프입니다. 이 그래프의 계층 파라미터 중 일부는 비어 있을 수 있습니다(예: 컨벌루션 계층의 가중치와 편향, 배치 정규화 계층의 평균과 분산). 계층 그래프를 exportONNXNetwork에 대한 입력 인수로 사용하려면 먼저 임의의 값을 할당하여 빈 파라미터를 초기화하십시오. 또는 내보내기를 수행하기 전에 다음 중 하나를 수행할 수도 있습니다.

  • 계층 그래프를 dlnetwork에 대한 입력 인수로 사용하여 LayerGraph 객체를 dlnetwork로 변환합니다. 빈 파라미터는 자동으로 초기화됩니다.

  • trainNetwork를 사용하여 LayerGraph 객체를 훈련된 DAGNetwork로 변환합니다. trainNetworklayers 입력 인수로 계층 그래프를 사용하십시오.

analyzeNetwork를 사용하여, ONNX 신경망으로 내보내기 전에 훈련된 신경망 또는 신경망 계층의 그래프에서 오류와 문제를 검출할 수 있습니다. SeriesNetwork 객체, DAGNetwork 객체 및 dlnetwork 객체의 경우 exportONNXNetwork를 사용하려면 오류가 없어야 합니다. exportONNXNetwork는 누락되었거나 연결되지 않은 출력 계층이 있는 LayerGraph 객체를 내보내는 것을 허용합니다.

파일 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

예: "network.onnx"

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: exportONNXNetwork(net,filename,NetworkName="my_net")은 신경망을 내보내고, 저장된 ONNX 신경망에 있는 신경망 이름을 "my_net"으로 지정합니다.

저장된 파일에 저장할 ONNX 신경망 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

예: NetworkName="my_squeezenet"

내보낸 모델에서 사용할 ONNX 연산자 세트의 버전으로, [6 13] 범위의 양의 정수로 지정됩니다. 디폴트 연산자 세트가 내보내려는 신경망을 지원하지 않는 경우, 이후 버전을 사용해 보십시오. 내보낸 신경망을 다른 프레임워크로 가져오려는 경우, 내보낼 때 사용한 연산자 세트를 해당 Importer가 지원하지 못한다면 가져오기가 실패할 수 있습니다.

적절한 연산자 세트 버전을 사용하고 있는지 확인하려면 ONNX 연산자 문서 [3]를 참조하십시오. 예를 들어, OpsetVersion=9maxUnpooling2dLayerMaxUnpool-9 ONNX 연산자로 내보냅니다.

예: OpsetVersion=6

ONNX 신경망의 배치 크기로, [] 또는 양의 정수로 지정됩니다. BatchSize[]로 지정하면 ONNX 신경망은 동적 배치 크기를 갖습니다. BatchSize를 양의 정수 k로 지정하면 ONNX 신경망은 k라는 고정된 배치 크기를 갖습니다.

예: BatchSize=10

제한 사항

  • exportONNXNetwork 함수는 다음과 같이 ONNX 버전을 지원합니다.

    • 이 함수는 ONNX 중간 표현 버전 7을 지원합니다.

    • 이 함수는 ONNX 연산자 세트 6~14를 지원합니다.

  • exportONNXNetwork 함수는 훈련 옵션, 학습률 인자 또는 정규화 인자와 같이 신경망 훈련과 관련된 설정 또는 속성을 내보내지 않습니다.

  • ONNX 형식이 지원하지 않는 계층을 포함하는 신경망을 내보내는 경우(ONNX 내보내기에 지원되는 계층 참조), exportONNXNetwork 함수는 지원되지 않는 계층 대신 자리 표시자 ONNX 연산자를 저장하고 경고를 반환합니다. 자리 표시자 연산자가 있는 ONNX 신경망은 다른 딥러닝 프레임워크로 가져올 수 없습니다.

  • MATLAB®과 ONNX 사이의 아키텍처 차이로 인해, 내보낸 신경망은 원래 신경망과 다른 구조를 가질 수 있습니다.

참고

내보낸 신경망을 가져올 경우 다시 가져온 신경망의 계층이 원래 신경망과 다를 수 있으며 지원되지 않을 수 있습니다.

세부 정보

모두 축소

ONNX 내보내기에 지원되는 계층

exportONNXNetwork 함수는 다음을 내보낼 수 있습니다.

  • 여러 개의 입력값과 여러 개의 출력값을 포함하는 훈련된 MATLAB 딥러닝 신경망을 ONNX 모델 형식으로 내보낼 수 있습니다. 다중 입력 및 다중 출력 딥러닝 신경망에 대해 자세히 알아보려면 Multiple-Input and Multiple-Output Networks 항목을 참조하십시오.

참고 문헌

[1] Open Neural Network Exchange. https://github.com/onnx/.

[2] ONNX. https://onnx.ai/.

버전 내역

R2018a에 개발됨