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}; +} +