1
1
module ModelingToolkitNeuralNets
2
2
3
- using ModelingToolkit: @parameters , @named , ODESystem, t_nounits
3
+ using ModelingToolkit: @parameters , @named , ODESystem, t_nounits, @connector , @variables ,
4
+ Equation
4
5
using ModelingToolkitStandardLibrary. Blocks: RealInput, RealOutput
5
6
using Symbolics: Symbolics, @register_array_symbolic , @wrapped
6
7
using LuxCore: stateless_apply
@@ -12,6 +13,24 @@ export NeuralNetworkBlock, multi_layer_feed_forward
12
13
13
14
include (" utils.jl" )
14
15
16
+ @connector function RealInput2 (; name, nin = 1 , u_start = zeros (nin))
17
+ @variables u (t_nounits)[1 : nin]= u_start [
18
+ input = true ,
19
+ description = " Inner variable in RealInput $name "
20
+ ]
21
+ u = collect (u)
22
+ ODESystem (Equation[], t_nounits, [u... ], []; name = name)
23
+ end
24
+
25
+ @connector function RealOutput2 (; name, nout = 1 , u_start = zeros (nout))
26
+ @variables u (t_nounits)[1 : nout]= u_start [
27
+ output = true ,
28
+ description = " Inner variable in RealOutput $name "
29
+ ]
30
+ u = collect (u)
31
+ ODESystem (Equation[], t_nounits, [u... ], []; name = name)
32
+ end
33
+
15
34
"""
16
35
NeuralNetworkBlock(n_input = 1, n_output = 1;
17
36
chain = multi_layer_feed_forward(n_input, n_output),
@@ -29,8 +48,8 @@ function NeuralNetworkBlock(n_input = 1,
29
48
@parameters p[1 : length (ca)] = Vector (ca)
30
49
@parameters T:: typeof (typeof (p))= typeof (p) [tunable = false ]
31
50
32
- @named input = RealInput (nin = n_input)
33
- @named output = RealOutput (nout = n_output)
51
+ @named input = RealInput2 (nin = n_input)
52
+ @named output = RealOutput2 (nout = n_output)
34
53
35
54
out = stateless_apply (chain, input. u, lazyconvert (typeof (ca), p))
36
55
0 commit comments