diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8c34ce6d5af5ea3319f7602b358fd315ba7b66ba..1da2865e087b9457c9ab41080569203ce32ba969 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -60,6 +60,14 @@ TestEMADLMavenPlugin:
- cd emadl-maven-plugin
- mvn dependency:resolve emadl:train -s settings.xml
+TestMnistWithAdaNet:
+ stage: linux
+ image: registry.git.rwth-aachen.de/monticore/embeddedmontiarc/generators/emadl2cpp/dockerimages/mxnet170:v0.0.1
+ script:
+ - mv /mxnet/build/libmxnet.so /mxnet/build/libmxnet.a /usr/lib/
+ - cd AdaNet
+ - mvn dependency:resolve emadl:train -s settings.xml
+
TestMNISTwithCustomLayer:
stage: linux
image: registry.git.rwth-aachen.de/monticore/embeddedmontiarc/generators/emadl2cpp/dockerimages/mxnet170:v0.0.1
diff --git a/AdaNet/.gitignore b/AdaNet/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b2f459ede0e80dc135e674d85ef16be6ac863a11
--- /dev/null
+++ b/AdaNet/.gitignore
@@ -0,0 +1,6 @@
+target/
+model/
+
+.idea/
+
+train.log
diff --git a/AdaNet/pom.xml b/AdaNet/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b49f2e1c5f787ef69a595b80f1640e082c9d645e
--- /dev/null
+++ b/AdaNet/pom.xml
@@ -0,0 +1,47 @@
+
+
+
+ 4.0.0
+
+ de.monticore.lang.monticar.application
+ mnist-calculator
+ 0.0.1
+
+
+ 1.8
+ UTF-8
+ UTF-8
+
+
+
+
+ de.monticore.lang.monticar.datasets
+ mnist
+ 1
+ dataset
+
+
+
+
+
+
+ de.monticore.lang.monticar.utilities
+ emadl-maven-plugin
+ 0.0.3-SNAPSHOT
+
+
+ GLUON
+ /usr/bin/python3
+ calculator.Connector
+ src/main/emadl
+ src/main/emadl
+
+
+
+
+
+
+
+
diff --git a/AdaNet/settings.xml b/AdaNet/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..521ee8f360ee1b36393f694b40975315c3ec4af7
--- /dev/null
+++ b/AdaNet/settings.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+ org.mortbay.jetty
+ de.topobyte
+
+
+
+
+
+
+
+ gitlab-maven
+
+
+
+ Deploy-Token
+ KJkmCZosey-A8XBES2Fy
+
+
+
+
+
+
+ se-nexus
+ cibuild
+ ${env.cibuild}
+
+
+
+
+
+ sonar
+
+ true
+
+
+
+
+ https://metric.se.rwth-aachen.de
+
+
+ jenkins
+
+
+ ${env.sonar}
+
+
+
+
+
+ se-nexus
+
+
+ se-nexus
+ https://nexus.se.rwth-aachen.de/content/groups/public
+ true
+ true
+
+
+ central
+ https://repo.maven.apache.org/maven2/
+
+
+
+
+ icm
+ https://bio.informatik.uni-jena.de/repository/libs-release-oss/
+
+
+
+
+ gitlab-maven
+ https://git.rwth-aachen.de/api/v4/projects/57999/packages/maven
+
+
+
+
+
+
+ central
+ https://repo.maven.apache.org/maven2/
+
+
+
+
+ se-nexus
+ https://nexus.se.rwth-aachen.de/content/groups/public
+ true
+ true
+
+
+ icm
+ https://bio.informatik.uni-jena.de/repository/libs-release-oss/
+
+
+
+
+
+
+
+
+ se-nexus
+
+
diff --git a/AdaNet/src/main/emadl/calculator/Add.emadl b/AdaNet/src/main/emadl/calculator/Add.emadl
new file mode 100644
index 0000000000000000000000000000000000000000..2409a08cacacb43df3284c9b687db14446f69eeb
--- /dev/null
+++ b/AdaNet/src/main/emadl/calculator/Add.emadl
@@ -0,0 +1,13 @@
+/* (c) https://github.com/MontiCore/monticore */
+package calculator;
+
+component Add{
+ ports
+ in Z(0:999) num1,
+ in Z(0:999) num2,
+ out Z(0:1998) sum;
+
+ implementation Math{
+ sum = num1 + num2;
+ }
+}
diff --git a/AdaNet/src/main/emadl/calculator/ArgMax.emadl b/AdaNet/src/main/emadl/calculator/ArgMax.emadl
new file mode 100644
index 0000000000000000000000000000000000000000..9d773983427bd85054682056ef414e177b3d6865
--- /dev/null
+++ b/AdaNet/src/main/emadl/calculator/ArgMax.emadl
@@ -0,0 +1,20 @@
+/* (c) https://github.com/MontiCore/monticore */
+package calculator;
+
+component ArgMax{
+ ports in Q^{n} inputVector,
+ out Z(0:oo) maxIndex,
+ out Q maxValue;
+
+ implementation Math{
+ maxIndex = 0;
+ maxValue = inputVector(1);
+
+ for i = 2:n
+ if inputVector(i) > maxValue
+ maxIndex = i - 1;
+ maxValue = inputVector(i);
+ end
+ end
+ }
+}
diff --git a/AdaNet/src/main/emadl/calculator/Calculator.emadl b/AdaNet/src/main/emadl/calculator/Calculator.emadl
new file mode 100644
index 0000000000000000000000000000000000000000..eacc575fab653131ad812b5b143d5ffdfe88d2b4
--- /dev/null
+++ b/AdaNet/src/main/emadl/calculator/Calculator.emadl
@@ -0,0 +1,45 @@
+/* (c) https://github.com/MontiCore/monticore */
+package calculator;
+
+component Calculator {
+ ports
+ in Q(0:1)^10 in1_1,
+ in Q(0:1)^10 in1_2,
+ in Q(0:1)^10 in1_3,
+ in Q(0:1)^10 in2_1,
+ in Q(0:1)^10 in2_2,
+ in Q(0:1)^10 in2_3,
+
+ out Z(0:1998) out1;
+
+ instance ArgMax<10> number1_ones;
+ instance ArgMax<10> number1_tens;
+ instance ArgMax<10> number1_hundreds;
+ instance ArgMax<10> number2_ones;
+ instance ArgMax<10> number2_tens;
+ instance ArgMax<10> number2_hundreds;
+ instance DigitCombiner number1;
+ instance DigitCombiner number2;
+ instance Add add;
+
+
+ connect in1_1 -> number1_hundreds.inputVector;
+ connect in1_2 -> number1_tens.inputVector;
+ connect in1_3 -> number1_ones.inputVector;
+ connect in2_1 -> number2_hundreds.inputVector;
+ connect in2_2 -> number2_tens.inputVector;
+ connect in2_3 -> number2_ones.inputVector;
+
+ connect number1_ones.maxIndex -> number1.ones;
+ connect number1_tens.maxIndex -> number1.tens;
+ connect number1_hundreds.maxIndex -> number1.hundreds;
+ connect number2_ones.maxIndex -> number2.ones;
+ connect number2_tens.maxIndex -> number2.tens;
+ connect number2_hundreds.maxIndex -> number2.hundreds;
+
+ connect number1.number -> add.num1;
+ connect number2.number -> add.num2;
+
+ connect add.sum -> out1;
+
+}
diff --git a/AdaNet/src/main/emadl/calculator/Connector.emadl b/AdaNet/src/main/emadl/calculator/Connector.emadl
new file mode 100644
index 0000000000000000000000000000000000000000..d299db52d69b7e943e9295a99d6342b41707d532
--- /dev/null
+++ b/AdaNet/src/main/emadl/calculator/Connector.emadl
@@ -0,0 +1,37 @@
+ /* (c) https://github.com/MontiCore/monticore */
+package calculator;
+
+component Connector {
+ ports in Z(0:255)^{1, 28, 28} image1,
+ in Z(0:255)^{1, 28, 28} image2,
+ in Z(0:255)^{1, 28, 28} image3,
+ in Z(0:255)^{1, 28, 28} image4,
+ in Z(0:255)^{1, 28, 28} image5,
+ in Z(0:255)^{1, 28, 28} image6,
+ out Z(0:1998) res;
+
+ instance Network predictor1;
+ instance Network predictor2;
+ instance Network predictor3;
+ instance Network predictor4;
+ instance Network predictor5;
+ instance Network predictor6;
+ instance Calculator cal;
+
+ connect image1 -> predictor1.data;
+ connect image2 -> predictor2.data;
+ connect image3 -> predictor3.data;
+ connect image4 -> predictor4.data;
+ connect image5 -> predictor5.data;
+ connect image6 -> predictor6.data;
+
+ connect predictor1.softmax -> cal.in1_1;
+ connect predictor2.softmax -> cal.in1_2;
+ connect predictor3.softmax -> cal.in1_3;
+ connect predictor4.softmax -> cal.in2_1;
+ connect predictor5.softmax -> cal.in2_2;
+ connect predictor6.softmax -> cal.in2_3;
+
+ connect cal.out1 -> res;
+
+}
diff --git a/AdaNet/src/main/emadl/calculator/DigitCombiner.emadl b/AdaNet/src/main/emadl/calculator/DigitCombiner.emadl
new file mode 100644
index 0000000000000000000000000000000000000000..fed722cea2375741805ba04fc089605f8c02b65f
--- /dev/null
+++ b/AdaNet/src/main/emadl/calculator/DigitCombiner.emadl
@@ -0,0 +1,14 @@
+/* (c) https://github.com/MontiCore/monticore */
+package calculator;
+
+component DigitCombiner{
+ ports
+ in Z(0:9) hundreds,
+ in Z(0:9) tens,
+ in Z(0:9) ones,
+ out Z(0:999) number;
+
+ implementation Math{
+ number = ones + 10 * tens + 100 * hundreds;
+ }
+}
diff --git a/AdaNet/src/main/emadl/calculator/Network.cnnt b/AdaNet/src/main/emadl/calculator/Network.cnnt
new file mode 100644
index 0000000000000000000000000000000000000000..ceea888bba0333bc4203a3730ddc70677037a18f
--- /dev/null
+++ b/AdaNet/src/main/emadl/calculator/Network.cnnt
@@ -0,0 +1,14 @@
+/* (c) https://github.com/MontiCore/monticore */
+configuration Network{
+ num_epoch:1
+ batch_size:10
+ normalize:false
+ context:cpu
+ load_checkpoint:false
+ optimizer:sgd{
+ learning_rate:0.1
+ learning_rate_decay:0.85
+ step_size:1000
+ weight_decay:0.0
+ }
+}
diff --git a/AdaNet/src/main/emadl/calculator/Network.emadl b/AdaNet/src/main/emadl/calculator/Network.emadl
new file mode 100644
index 0000000000000000000000000000000000000000..5d9404c011230105d356458f9d646986e52b2cd9
--- /dev/null
+++ b/AdaNet/src/main/emadl/calculator/Network.emadl
@@ -0,0 +1,13 @@
+/* (c) https://github.com/MontiCore/monticore */
+package calculator;
+
+component Network{
+ ports in Z(0:255)^{1, 28, 28} data,
+ out Q(0:1)^{10} softmax;
+
+ implementation CNN {
+ data ->
+ AdaNet()->
+ softmax;
+ }
+}
diff --git a/AdaNet/src/main/emadl/calculator/Network.tag b/AdaNet/src/main/emadl/calculator/Network.tag
new file mode 100644
index 0000000000000000000000000000000000000000..7618a535eb290401cf041254b84147289aef83a8
--- /dev/null
+++ b/AdaNet/src/main/emadl/calculator/Network.tag
@@ -0,0 +1,8 @@
+/* (c) https://github.com/MontiCore/monticore */
+package calculator;
+conforms to artifacttag.DatasetArtifactTagSchema;
+
+tags NeuronalNetwork {
+ tag Network with DatasetArtifact = {artifact = de.monticore.lang.monticar.datasets:mnist:1, type = HDF5};
+}
+