neuralODELayer
설명
신경망 ODE 계층은 ODE의 해를 출력합니다.
생성
속성
신경망 ODE 함수를 나타내는 신경망으로, dlnetwork 객체로 지정됩니다.
Network에 입력값이 한 개 있으면 predict(net,Y)는 연립 ODE를 정의합니다. 여기서 net은 신경망입니다. Network에 입력값이 2개 있으면 predict(net,T,Y)는 연립 ODE를 정의합니다. 여기서 T는 배치 차원에 대해 반복되는 시간 스텝입니다.
신경망의 입력값과 출력값은 그 신경망 크기와 형식이 일치해야 합니다.
GradientMode가 "adjoint"이면, 신경망 State 속성은 비어 있어야 합니다. State 속성이 비어 있지 않은 상태로 신경망을 사용하려면 GradientMode를 "direct"로 설정하십시오.
적분 구간으로, 요소를 두 개 이상 갖는 숫자형 벡터로 지정됩니다. TimeInterval의 요소는 모두 증가하거나 모두 감소해야 합니다.
솔버는 Y0으로 주어지는 초기 조건을 초기 시간 TimeInterval(1)에 적용한 다음, ODE 함수를 TimeInterval(1)에서 TimeInterval(end)까지 적분합니다.
TimeInterval이 2개의 요소([t0 tf])를 가지면 솔버는 지점tf에서 계산된 해를 반환합니다.TimeInterval이 3개 이상의 요소([t0 t1 ... tf])를 가지면 솔버는 지정된 지점[t1 ... tf]에서 계산된 해를 반환합니다. 솔버는TimeInterval에 지정된 각 지점을 정확히 스텝으로 사용하지 않습니다. 대신 솔버는 자체 내부 스텝을 사용하여 해를 계산한 다음,TimeInterval에 지정된 지점에서 해를 평가합니다. 지정된 지점에서 구해진 해는 각 내부 스텝에서 계산된 해와 동일한 정도의 정확성을 가집니다.중간 지점을 여러 개 지정해도 계산의 효율성에는 거의 영향을 미치지 않지만 대규모 시스템의 경우에는 메모리 관리에 부정적인 영향을 미칠 수 있습니다.
R2025a 이후
신경망 ODE 연산에 사용할 솔버로, 다음 값 중 하나로 지정됩니다.
"ode45"— 명시적 룽게-쿠타(Explicit Runge-Kutta) (4,5) 공식인 도르만드-프린스(Dormand-Prince) 쌍을 사용하는 비경직성 미분 방정식에 사용할 솔버."ode45"솔버는 대부분의 작업에 적합하며, 다른 솔버보다 속도와 정확도가 높을 수 있습니다."ode1"— 오일러 방법을 사용하는 비경직성 미분 방정식에 사용할 솔버."ode1"솔버는 고정 스텝 크기를 사용하며, 코드 생성과 Simulink 작업에 더 적합할 수 있습니다.
Solver가 "ode1"이면 RelativeTolerance 속성과 AbsoluteTolerance 속성은 아무런 영향을 미치지 않습니다.
SolverOptions 속성을 지정할 경우, 디폴트 값은 속성에서 지정한 솔버와 일치하게 됩니다. 그 외의 경우 디폴트 값은 "ode45"입니다.
R2025a 이후
솔버의 options 객체로, deep.ode.options.ODE45 또는 deep.ode.options.ODE1 객체로 지정됩니다.
계층의 솔버 옵션을 설정하려면 점 표기법을 사용하십시오. 예를 들어 상대 허용오차를 1e-4로 설정하려면, layer.SolverOptions.RelativeTolerance = 1e-4를 사용합니다. 여기서 layer는 신경망 ODE 계층의 인스턴스입니다.
대부분의 경우 options 객체를 직접 만들 필요가 없습니다. SolverOptions 속성을 지정하는 경우 RelativeTolerance 속성, AbsoluteTolerance 속성 및 GradientMode 속성을 지정해서는 안 됩니다.
"ode45" 솔버와 "ode1" 솔버에서 지원하는 옵션을 보려면 deep.ode.options.ODE45 항목과 deep.ode.options.ODE1 항목을 각각 참조하십시오.
dlgradient 함수를 사용할 경우 초기 조건과 파라미터에 대한 기울기를 계산하는 방법으로, 다음 값 중 하나로 지정됩니다.
"direct"— 수치 솔버로 수행하는 연산을 역전파(backpropagate)해 나가는 방식으로 기울기를 구합니다. 이 옵션은 미니 배치 크기가 크거나TimeInterval에 값이 많이 포함된 경우에 가장 적합합니다."adjoint"— 연결된 수반 연립 ODE를 풀어 기울기를 계산합니다. 이 옵션은 미니 배치 크기가 작거나TimeInterval에 값이 적게 포함된 경우에 가장 적합합니다.
팁
신경망 ODE 솔버 옵션을 사용자 지정하려면 Solver 속성과 SolverOptions 속성을 사용하십시오. 이러한 속성은 신경망 ODE 솔버에 대한 추가 제어가 가능하므로 권장됩니다.
GradientMode가 "adjoint"이면, 신경망 State 속성은 비어 있어야 합니다. State 속성이 비어 있지 않은 상태로 신경망을 사용하려면 GradientMode를 "direct"로 설정하십시오.
dlaccelerate 함수는 GradientMode 속성이 "direct"로 설정된 신경망 ODE 계층이 있는 신경망에 대해 순방향 통과 가속을 지원하지 않습니다. 신경망 ODE 계층이 있는 신경망의 순방향 통과를 가속하려면, GradientMode 속성을 "adjoint" 또는 "adjoint-seminorm"으로 설정하거나 코드에서 신경망의 순방향 통과를 수행하지 않는 코드 부분을 가속화하십시오.
경고
GradientMode가 "adjoint"이면 Network의 모든 계층이 가속을 지원해야 합니다. 그렇지 않으면 예기치 않은 결과가 반환될 수 있습니다.
GradientMode가 "adjoint"인 경우 ODE 함수 입력값을 추적하여 자동 미분에 사용할 계산 그래프를 결정합니다. 이 추적 과정은 얼마간의 시간이 걸릴 수 있으며 동일한 추적을 다시 계산하게 될 수도 있습니다. 추적을 최적화하고 캐시하고 재사용하여 기울기 계산 속도를 높일 수 있습니다.
딥러닝 함수 가속화에 대한 자세한 내용은 Deep Learning Function Acceleration for Custom Training Loops 항목을 참조하십시오.
NeuralODELayer 객체는 이 속성을 문자형 벡터로 저장합니다.
상대 허용오차로, 양의 스칼라로 지정됩니다. 이 허용오차는 각 해 성분 크기에 상대적인 오차를 측정합니다. 간단히 말하면 상대 허용오차는 절대 허용오차 AbsoluteTolerance보다 작은 성분을 제외한 모든 해 성분에서 정확한 자릿수를 제어합니다.
각 스텝에서, ODE 솔버는 해의 i번째 성분에서 국소 오차 e를 추정합니다. 성공하려면, 상대 허용오차와 절대 허용오차에서 결정된 오차 범위를 둘 다 충족해야 합니다.
|e(i)| <= max(RelativeTolerance*abs(y(i)),AbsoluteTolerance(i))
Solver가 "ode1"이면 RelativeTolerance 속성은 아무런 영향을 미치지 않습니다.
팁
신경망 ODE 솔버 옵션을 사용자 지정하려면 Solver 속성과 SolverOptions 속성을 사용하십시오. 이러한 속성은 신경망 ODE 솔버에 대한 추가 제어가 가능하므로 권장됩니다.
데이터형: single | double
절대 허용오차로, 양의 스칼라 또는 벡터로 지정됩니다. 이 허용오차보다 작은 해의 값은 중요하지 않은 것으로 간주됩니다. 해 |y|가 AbsoluteTolerance보다 작으면 솔버는 |y|의 정확한 자릿수를 구할 필요가 없습니다. 이러한 이유로, AbsoluteTolerance의 값은 해 성분의 크기를 고려해야 합니다.
AbsoluteTolerance가 벡터이면 해와 길이가 동일해야 합니다. AbsoluteTolerance가 스칼라이면 값이 모든 해 성분에 적용됩니다.
각 스텝에서, ODE 솔버는 해의 i번째 성분에서 국소 오차 e를 추정합니다. 성공하려면, 상대 허용오차와 절대 허용오차에서 결정된 오차 범위를 둘 다 충족해야 합니다.
|e(i)| <= max(RelativeTolerance*abs(y(i)),AbsoluteTolerance(i))
Solver가 "ode1"이면 AbsoluteTolerance 속성은 아무런 영향을 미치지 않습니다.
팁
신경망 ODE 솔버 옵션을 사용자 지정하려면 Solver 속성과 SolverOptions 속성을 사용하십시오. 이러한 속성은 신경망 ODE 솔버에 대한 추가 제어가 가능하므로 권장됩니다.
데이터형: single | double
예제
신경망 ODE 계층을 만듭니다. 컨벌루션 계층과 tanh 계층을 차례로 포함하는 ODE 신경망을 지정합니다. 시간 구간을 [0, 1]로 지정합니다.
inputSize = [14 14 8];
layersODE = [
imageInputLayer(inputSize)
convolution2dLayer(3,8,Padding="same")
tanhLayer];
netODE = dlnetwork(layersODE);
tspan = [0 1];
layer = neuralODELayer(netODE,tspan)layer =
NeuralODELayer with properties:
Name: ''
TimeInterval: [0 1]
Learnable Parameters
Network: [1×1 dlnetwork]
Solver properties
GradientMode: 'direct'
RelativeTolerance: 1.0000e-03
AbsoluteTolerance: 1.0000e-06
Solver: ode45
Show all properties
신경망 ODE 계층을 포함하는 신경망을 만듭니다.
layers = [
imageInputLayer([28 28 1])
convolution2dLayer([3 3],8,Padding="same",Stride=2)
reluLayer
neuralODELayer(netODE,tspan)
fullyConnectedLayer(10)
softmaxLayer];
net = dlnetwork(layers)net =
dlnetwork with properties:
Layers: [6×1 nnet.cnn.layer.Layer]
Connections: [5×2 table]
Learnables: [6×3 table]
State: [0×3 table]
InputNames: {'imageinput'}
OutputNames: {'softmax'}
Initialized: 1
View summary with summary.
R2025a 이후
신경망 ODE 계층을 만듭니다. 컨벌루션 계층과 tanh 계층을 차례로 포함하는 ODE 신경망을 지정합니다. 시간 구간을 [0, 1]로 지정합니다.
inputSize = [14 14 8];
layersODE = [
imageInputLayer(inputSize)
convolution2dLayer(3,8,Padding="same")
tanhLayer];
netODE = dlnetwork(layersODE);
tspan = [0 1];
layer = neuralODELayer(netODE,tspan)layer =
NeuralODELayer with properties:
Name: ''
TimeInterval: [0 1]
Learnable Parameters
Network: [1×1 dlnetwork]
Solver properties
GradientMode: 'direct'
RelativeTolerance: 1.0000e-03
AbsoluteTolerance: 1.0000e-06
Solver: ode45
Show all properties
초기 스텝 크기를 1e-3으로, 최대 스텝 크기를 1e-2로 지정합니다.
layer.SolverOptions.InitialStep = 1e-3; layer.SolverOptions.MaxStep = 1e-2;
솔버 옵션을 표시합니다.
layer.SolverOptions
ans =
ODE45 with properties:
InitialStep: 1.0000e-03
MaxStep: 0.0100
RelativeTolerance: 1.0000e-03
AbsoluteTolerance: 1.0000e-06
GradientMode: 'direct'
팁
함수로 정의된 딥러닝 모델 또는 사용자 지정 계층 함수에서 신경망 ODE 연산을 적용하려면
dlode45를 사용하십시오.
알고리즘
신경망 상미분 방정식(ODE) 연산은 지정된 ODE의 해를 반환합니다. 구체적으로, 입력값이 주어지면 신경망 ODE 연산은 시간 지평 (t0,t1)에 대해 초기 조건 y(t0) = y0을 갖는 ODE 의 수치 해를 출력합니다. 여기서 t와 y는 ODE 함수 입력값을 나타내고 θ는 학습 가능한 파라미터 세트입니다. 일반적으로 초기 조건 y0은 신경망 입력값이거나 다른 딥러닝 연산의 출력값입니다.
연산을 적용하기 위해 NeuralODELayer 함수는 명시적 룽게-쿠타(Explicit Runge-Kutta) (4,5) 공식인 도르만드-프린스(Dormand-Prince) 쌍을 기반으로 하는 ode45 함수를 사용합니다. 이는 단일 스텝(Single-step) 솔버입니다. 즉, y(tn)을 계산할 경우 이 솔버는 바로 이전 시간 점 y(tn-1)에서의 해만 필요로 합니다[2] [3].
계층 배열 또는 계층 그래프의 계층은 뒤에 오는 계층에 데이터를 전달할 때 형식이 지정된 dlarray 객체로 전달합니다. dlarray 객체의 형식은 문자들로 구성된 문자열로, 각 문자는 데이터의 대응되는 차원을 설명합니다. 형식은 다음 문자 중 하나 이상으로 구성됩니다.
"S"— 공간"C"— 채널"B"— 배치"T"— 시간"U"— 지정되지 않음
4차원 배열로 표현되는 2차원 영상 데이터를 예로 들면 처음 2개 차원은 영상의 공간 차원, 3번째 차원은 영상의 채널, 4번째 차원은 배치 차원에 대응되며, "SSCB"(공간, 공간, 채널, 배치) 형식으로 설명할 수 있습니다.
functionLayer 객체를 사용하여 사용자 지정 계층을 개발하거나, dlnetwork 객체에 forward 및 predict 함수를 사용하는 경우와 같은 자동 미분 워크플로에서 이러한 dlarray 객체와 상호 작용할 수 있습니다.
이 표는 NeuralODELayer 객체의 지원되는 입력 형식과 그에 대응되는 출력 형식을 보여줍니다. 계층의 출력이 nnet.layer.Formattable 클래스를 상속하지 않는 사용자 지정 계층에 전달되거나 Formattable 속성을 0(false)으로 설정한 FunctionLayer 객체에 전달될 경우 이 계층은 이 표에 나와 있는 형식에 따라 순서가 지정된 차원을 갖는, 형식이 지정되지 않은 dlarray 객체를 수신합니다. 여기에 나와 있는 형식은 일부에 불과합니다. 계층은 다른 형식도 지원할 수 있습니다(예: 추가적인 "S"(공간) 또는 "U"(미지정) 차원을 갖는 형식).
TimeInterval에 3개 이상의 요소가 포함된 경우 계층은 "T"(시간) 차원을 갖는 데이터를 출력합니다.
| 입력 형식 | TimeInterval | 출력 형식 |
|---|---|---|
| [t0 tf] |
|
[t0 t1 ... tf] |
| |
| [t0 tf] |
|
[t0 t1 ... tf] |
| |
| [t0 tf] |
|
[t0 t1 ... tf] |
| |
| [t0 tf] |
|
[t0 t1 ... tf] |
| |
| [t0 tf] |
|
[t0 t1 ... tf] |
| |
| [t0 tf] |
|
[t0 t1 ... tf] |
| |
| [t0 tf] |
|
[t0 t1 ... tf] |
| |
"SB"(공간, 배치) | [t0 tf] | "SB"(공간, 배치) |
[t0 t1 ... tf] | "SBT"(공간, 배치, 시간) | |
"SSB"(공간, 공간, 배치) | [t0 tf] | "SSB"(공간, 공간, 배치) |
[t0 t1 ... tf] | "SSBT"(공간, 공간, 배치, 시간) | |
"SSSB"(공간, 공간, 공간, 배치) | [t0 tf] | "SSSB"(공간, 공간, 공간, 배치) |
[t0 t1 ... tf] | "SSSBT"(공간, 공간, 공간, 배치, 시간) | |
"SS"(공간, 공간) | [t0 tf] | "SS"(공간, 공간) |
[t0 t1 ... tf] | "SST"(공간, 공간, 시간) | |
"SSS"(공간, 공간, 공간) | [t0 tf] | "SSS"(공간, 공간, 공간) |
[t0 t1 ... tf] | "SSST"(공간, 공간, 공간, 시간) |
버전 내역
R2023b에 개발됨Solver 속성을 사용하여 솔버를 지정할 수 있습니다. "ode45" 또는 "ode1" 솔버를 추가로 사용자 지정하려면 SolverOptions 인수를 사용하십시오.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)