Main Content

genFunction

얕은 신경망 시뮬레이션에 사용할 MATLAB 함수 생성

설명

이 함수는 얕은 신경망 시뮬레이션에 사용할 MATLAB® 함수를 생성합니다. genFunction 함수는 컨벌루션 신경망이나 LSTM 신경망과 같은 딥러닝 신경망을 지원하지 않습니다. 딥러닝을 위한 코드 생성에 대한 자세한 내용은 코드 생성 항목을 참조하십시오.

예제

genFunction(net,pathname)은 모든 설정, 가중치와 편향 값, 모듈 함수, 계산을 하나의 파일에 담아 신경망 시뮬레이션에 사용할 완전 독립형 MATLAB 함수를 생성합니다. 그 결과 독립형 MATLAB 함수 파일이 생성됩니다. 이 함수는 MATLAB Compiler™ 툴 및 MATLAB Coder™ 툴과 함께 사용할 수도 있습니다.

예제

genFunction(___,'MatrixOnly','yes')는 디폴트 셀/행렬 표기법을 무시하고 MATLAB Coder 툴과 호환되는 행렬 인수만을 사용하는 함수를 생성합니다. 정적 신경망에서는 행렬의 열이 독립적인 샘플로 해석됩니다. 동적 신경망에서는 행렬의 열이 일련의 시간 스텝으로 해석됩니다. 디폴트 값은 'no'입니다.

genFunction(___,'ShowLinks','no')는 생성된 도움말 및 소스 코드로 연결되는 링크를 표시하는 디폴트 동작을 비활성화합니다. 디폴트 값은 'yes'입니다.

예제

모두 축소

이 예제에서는 정적 신경망에서 MATLAB 함수와 MEX 함수를 만드는 방법을 보여줍니다.

먼저 정적 신경망을 훈련시키고, 훈련 데이터에 대해 출력값을 계산합니다.

[x,t] = bodyfat_dataset;
bodyfatNet = feedforwardnet(10);
bodyfatNet = train(bodyfatNet,x,t);
y = bodyfatNet(x);

다음으로, MATLAB 함수를 생성하고 테스트합니다. 그런 다음 mcc를 사용하여 이 함수를 공유/동적으로 링크된 라이브러리로 컴파일합니다.

genFunction(bodyfatNet,'bodyfatFcn');
y2 = bodyfatFcn(x);
accuracy2 = max(abs(y-y2))
mcc -W lib:libBodyfat -T link:lib bodyfatFcn

다음으로, 셀형 배열 인수는 지원하지 않고 행렬 인수만 지원하는 MATLAB 함수를 생성하여 테스트합니다. MATLAB Coder 툴 codegen을 사용하여 MEX 함수를 생성하고 이 함수도 테스트합니다.

genFunction(bodyfatNet,'bodyfatFcn','MatrixOnly','yes');
y3 = bodyfatFcn(x);
accuracy3 = max(abs(y-y3))
 
x1Type = coder.typeof(double(0),[13 Inf]); % Coder type of input 1
codegen bodyfatFcn.m -config:mex -o bodyfatCodeGen -args {x1Type}
y4 = bodyfatodeGen(x);
accuracy4 = max(abs(y-y4))

이 예제에서는 동적 신경망에서 MATLAB 함수와 MEX함수를 만드는 방법을 보여줍니다.

먼저 동적 신경망을 훈련시키고, 훈련 데이터에 대해 출력값을 계산합니다.

[x,t] = maglev_dataset;
maglevNet = narxnet(1:2,1:2,10);
[X,Xi,Ai,T] = preparets(maglevNet,x,{},t);
maglevNet = train(maglevNet,X,T,Xi,Ai);
[y,xf,af] = maglevNet(X,Xi,Ai);

다음으로, MATLAB 함수를 생성하고 테스트합니다. 이 함수에 mcc를 사용하여 공유/동적으로 링크된 라이브러리를 만듭니다.

genFunction(maglevNet,'maglevFcn');
[y2,xf,af] = maglevFcn(X,Xi,Ai);
accuracy2 = max(abs(cell2mat(y)-cell2mat(y2)))
mcc -W lib:libMaglev -T link:lib maglevFcn

다음으로, 셀형 배열 인수는 지원하지 않고 행렬 인수만 지원하는 MATLAB 함수를 생성하여 테스트합니다. MATLAB Coder 툴 codegen을 사용하여 MEX 함수를 생성하고 이 함수도 테스트합니다.

genFunction(maglevNet,'maglevFcn','MatrixOnly','yes');
x1 = cell2mat(X(1,:)); % Convert each input to matrix
x2 = cell2mat(X(2,:));
xi1 = cell2mat(Xi(1,:)); % Convert each input state to matrix
xi2 = cell2mat(Xi(2,:));
[y3,xf1,xf2] = maglevFcn(x1,x2,xi1,xi2);
accuracy3 = max(abs(cell2mat(y)-y3))
 
x1Type = coder.typeof(double(0),[1 Inf]); % Coder type of input 1
x2Type = coder.typeof(double(0),[1 Inf]); % Coder type of input 2
xi1Type = coder.typeof(double(0),[1 2]); % Coder type of input 1 states
xi2Type = coder.typeof(double(0),[1 2]); % Coder type of input 2 states
codegen maglevFcn.m -config:mex -o maglevNetCodeGen -args {x1Type x2Type xi1Type xi2Type}
[y4,xf1,xf2] = maglevNetCodeGen(x1,x2,xi1,xi2);
dynamic_codegen_accuracy = max(abs(cell2mat(y)-y4))

입력 인수

모두 축소

신경망으로, network 객체로 지정됩니다.

예: net = feedforwardnet(10);

생성된 함수 파일의 위치와 이름으로, 문자열로 지정됩니다. 파일 이름 확장자 .m을 지정하지 않으면 자동으로 추가됩니다. 파일의 경로를 지정하지 않으면 디폴트 위치는 현재 작업 폴더입니다.

예: 'myFcn.m'

데이터형: char

확장 기능

버전 내역

R2013b에 개발됨