diff --git a/src/main/resources/templates/gluon/CNNNet.ftl b/src/main/resources/templates/gluon/CNNNet.ftl index c02d1732e5acfa7a6296f627230eb202144f38de..e2c102c8d304d428d8f0e7ac09c04f31c810c682 100644 --- a/src/main/resources/templates/gluon/CNNNet.ftl +++ b/src/main/resources/templates/gluon/CNNNet.ftl @@ -72,7 +72,7 @@ class Net(gluon.HybridBlock): def __init__(self, data_mean=None, data_std=None, **kwargs): super(Net, self).__init__(**kwargs) with self.name_scope(): -${tc.include(tc.architecture.body, "ARCHITECTURE_DEFINITION")} +${tc.include(tc.architecture.streams[0], "ARCHITECTURE_DEFINITION")} def hybrid_forward(self, F, x): -${tc.include(tc.architecture.body, "FORWARD_FUNCTION")} \ No newline at end of file +${tc.include(tc.architecture.streams[0], "FORWARD_FUNCTION")} \ No newline at end of file diff --git a/src/test/java/de/monticore/lang/monticar/cnnarch/gluongenerator/GenerationTest.java b/src/test/java/de/monticore/lang/monticar/cnnarch/gluongenerator/GenerationTest.java index abe45750044437ca9a85a3442c31e746289ed516..c8b5d6f77d3f167313d5a2384578460411819637 100644 --- a/src/test/java/de/monticore/lang/monticar/cnnarch/gluongenerator/GenerationTest.java +++ b/src/test/java/de/monticore/lang/monticar/cnnarch/gluongenerator/GenerationTest.java @@ -128,6 +128,16 @@ public class GenerationTest extends AbstractSymtabTest { assertTrue(Log.getFindings().size() == 3); } + /* TODO: Uncomment when multiple streams are implemented + @Test + public void testMultipleStreams() throws IOException, TemplateException { + Log.getFindings().clear(); + String[] args = {"-m", "src/test/resources/valid_tests", "-r", "MultipleStreams"}; + CNNArch2GluonCli.main(args); + assertTrue(Log.getFindings().size() == 3); + } + */ + @Test public void testFullCfgGeneration() throws IOException, TemplateException { Log.getFindings().clear(); diff --git a/src/test/resources/architectures/Alexnet.cnna b/src/test/resources/architectures/Alexnet.cnna index d42958dc3711d1e39dfc03522628cc252e6aab6f..048d808ec23183efb76014a92bdd40b3dd4d7875 100644 --- a/src/test/resources/architectures/Alexnet.cnna +++ b/src/test/resources/architectures/Alexnet.cnna @@ -39,5 +39,5 @@ architecture Alexnet(img_height=224, img_width=224, img_channels=3, classes=10){ fc(->=2) -> FullyConnected(units=10) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/architectures/ResNeXt50.cnna b/src/test/resources/architectures/ResNeXt50.cnna index 78cf41edebded64943170ee4e2d10f07b1447fc5..aed84f4717605cb572e5cc969f3af39a08b2faa1 100644 --- a/src/test/resources/architectures/ResNeXt50.cnna +++ b/src/test/resources/architectures/ResNeXt50.cnna @@ -40,5 +40,5 @@ architecture ResNeXt50(img_height=224, img_width=224, img_channels=3, classes=10 GlobalPooling(pool_type="avg") -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/architectures/ResNet152.cnna b/src/test/resources/architectures/ResNet152.cnna index 60031f27525974f816b5de7992101a132c51a589..27d7f6abc6ae6163c85d6de55aa8c17f4aeb3a3c 100644 --- a/src/test/resources/architectures/ResNet152.cnna +++ b/src/test/resources/architectures/ResNet152.cnna @@ -33,5 +33,5 @@ architecture ResNet152(img_height=224, img_width=224, img_channels=3, classes=10 GlobalPooling(pool_type="avg") -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/architectures/ResNet34.cnna b/src/test/resources/architectures/ResNet34.cnna index bf9173b022fab0159a735557f300cc1cb8f058a2..7742f98c2b27c71a0185da7d04e07b8cb2d011b0 100644 --- a/src/test/resources/architectures/ResNet34.cnna +++ b/src/test/resources/architectures/ResNet34.cnna @@ -31,5 +31,5 @@ architecture ResNet34(img_height=224, img_width=224, img_channels=3, classes=100 GlobalPooling(pool_type="avg") -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } diff --git a/src/test/resources/architectures/SequentialAlexnet.cnna b/src/test/resources/architectures/SequentialAlexnet.cnna index 66ad2a7cab6653e1b8b7421e820f59a454031a38..c02983afee2b6f9a4b82a737faade3209f090c17 100644 --- a/src/test/resources/architectures/SequentialAlexnet.cnna +++ b/src/test/resources/architectures/SequentialAlexnet.cnna @@ -25,5 +25,5 @@ architecture SequentialAlexnet(img_height=224, img_width=224, img_channels=3, cl fc() -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } diff --git a/src/test/resources/architectures/ThreeInputCNN_M14.cnna b/src/test/resources/architectures/ThreeInputCNN_M14.cnna index 95f50f4c0ff2b229041fe79a437193e0dae09b58..d23221a448b0fbdd5c3ac79124a648d0cd14b997 100644 --- a/src/test/resources/architectures/ThreeInputCNN_M14.cnna +++ b/src/test/resources/architectures/ThreeInputCNN_M14.cnna @@ -28,5 +28,5 @@ architecture ThreeInputCNN_M14(img_height=200, img_width=300, img_channels=3, cl Relu() -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/architectures/VGG16.cnna b/src/test/resources/architectures/VGG16.cnna index 7e4ad84d5dfb91bdf8c4ae487714ec54cbec56d4..b6df512adad21d04a39fa34bc2599c786866d789 100644 --- a/src/test/resources/architectures/VGG16.cnna +++ b/src/test/resources/architectures/VGG16.cnna @@ -27,5 +27,5 @@ architecture VGG16(img_height=224, img_width=224, img_channels=3, classes=1000){ fc() -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest1.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest1.cnna deleted file mode 100644 index 8436e3ed0f66fade8fec04d98ad4d199a8c7d5c7..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/ArgumentConstraintTest1.cnna +++ /dev/null @@ -1,34 +0,0 @@ -architecture ArgumentConstraintTest1(img_height=224, img_width=224, img_channels=3, classes=1000){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, stride=1, act=true){ - Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) -> - BatchNorm() -> - Relu(?=act) - } - def skip(channels, stride){ - Convolution(kernel=(1,1), channels=75, stride=(stride,stride)) -> - BatchNorm() - } - def resLayer(channels, stride=1){ - ( - conv(kernel=3, channels=channels, stride=stride) -> - conv(kernel=3, channels=channels, stride=stride, act=false) - | - skip(channels=channels, stride=stride, ?=(stride!=1)) - ) -> - Add() -> - Relu() - } - - image -> - conv(kernel=7, channels=64, stride=2) -> - Pooling(pool_type="max", kernel=(3,3), stride=(2,2)) -> - resLayer(channels=64, ->=3) -> - resLayer(channels=128, stride=2) -> - GlobalPooling(pool_type="avg") -> - FullyConnected(units=classes, ->=true) -> - Softmax() -> - predictions -} diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest2.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest2.cnna deleted file mode 100644 index 59b8611d0a3ae5a9959d39bc6a95d6966b646ac8..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/ArgumentConstraintTest2.cnna +++ /dev/null @@ -1,34 +0,0 @@ -architecture ArgumentConstraintTest2(img_height=224, img_width=224, img_channels=3, classes=1000){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, stride=1, act=true){ - Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) -> - BatchNorm() -> - Relu(?=act) - } - def skip(channels, stride){ - Convolution(kernel=(1,1), channels=96, stride=(stride,-stride)) -> - BatchNorm() - } - def resLayer(channels, stride=1){ - ( - conv(kernel=3, channels=channels, stride=stride) -> - conv(kernel=3, channels=channels, stride=stride, act=false) - | - skip(channels=channels, stride=stride, ?=(stride!=1)) - ) -> - Add() -> - Relu() - } - - image -> - conv(kernel=7, channels=64, stride=2) -> - Pooling(pool_type="max", kernel=(3,3), stride=(2,2)) -> - resLayer(channels=64, ->=3) -> - resLayer(channels=128, stride=2) -> - GlobalPooling(pool_type="avg") -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest3.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest3.cnna deleted file mode 100644 index ee333ab976ae703ae456d662dbbcceb963cf0860..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/ArgumentConstraintTest3.cnna +++ /dev/null @@ -1,34 +0,0 @@ -architecture ArgumentConstraintTest3(img_height=224, img_width=224, img_channels=3, classes=1000){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, stride=1, act=true){ - Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) -> - BatchNorm() -> - Relu(?=act) - } - def skip(channels, stride){ - Convolution(kernel=(1,1), channels=64, stride=(stride,stride)) -> - BatchNorm() - } - def resLayer(channels, stride=1){ - ( - conv(kernel=3, channels=channels, stride=stride) -> - conv(kernel=3, channels=channels, stride=stride, act=false) - | - skip(channels=channels, stride=stride, ?=(stride!=1)) - ) -> - Add() -> - Relu() - } - - image -> - conv(kernel=7, channels=64, stride=2) -> - Pooling(pool_type="max", kernel=(3,3), stride=(2,2), padding="valid") -> - resLayer(channels=64, ->=3) -> - resLayer(channels=128, stride=2) -> - GlobalPooling(pool_type="avg", ?=1) -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest4.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest4.cnna deleted file mode 100644 index f06b6a8de81d9e65bba21df3a2ba89885792bbab..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/ArgumentConstraintTest4.cnna +++ /dev/null @@ -1,34 +0,0 @@ -architecture ArgumentConstraintTest4(img_height=224, img_width=224, img_channels=3, classes=1000){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, stride=1, act=true){ - Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) -> - BatchNorm() -> - Relu(?=act) - } - def skip(channels, stride){ - Convolution(kernel=(1,1), channels=96, stride=(stride,stride)) -> - BatchNorm() - } - def resLayer(channels, stride=1){ - ( - conv(kernel=3, channels=channels, stride=stride) -> - conv(kernel=3, channels=channels, stride=stride, act=false) - | - skip(channels=channels, stride=stride, ?=(stride!=1)) - ) -> - Add() -> - Relu() - } - - image -> - conv(kernel=7, channels=64, stride=2) -> - Pooling(pool_type="max", kernel=(3,3), stride=(2,2), padding=1) -> - resLayer(channels=64, ->=3) -> - resLayer(channels=128, stride=2) -> - GlobalPooling(pool_type="avg") -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest5.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest5.cnna deleted file mode 100644 index 42446f06c1f364123e94ba197451c2307875aed5..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/ArgumentConstraintTest5.cnna +++ /dev/null @@ -1,34 +0,0 @@ -architecture ArgumentConstraintTest5(img_height=224, img_width=224, img_channels=3, classes=1000){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, stride=1, act=true){ - Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) -> - BatchNorm() -> - Relu(?=act) - } - def skip(channels, stride){ - Convolution(kernel=(1,-1), channels=96, stride=(stride,stride)) -> - BatchNorm() - } - def resLayer(channels, stride=1){ - ( - conv(kernel=3, channels=channels, stride=stride) -> - conv(kernel=3, channels=channels, stride=stride, act=false) - | - skip(channels=channels, stride=stride, ?=(stride!=1)) - ) -> - Add() -> - Relu() - } - - image -> - conv(kernel=7, channels=64, stride=2) -> - Pooling(pool_type="max", kernel=(3,3), stride=(2,2), padding="same") -> - resLayer(channels=64, ->=3) -> - resLayer(channels=128, stride=2) -> - GlobalPooling(pool_type="avg") -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest6.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest6.cnna deleted file mode 100644 index e046ce45c979e902e3cac45dea516b8b55a3be4f..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/ArgumentConstraintTest6.cnna +++ /dev/null @@ -1,34 +0,0 @@ -architecture ArgumentConstraintTest6(img_height=224, img_width=224, img_channels=3, classes=1000){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, stride=1, act=true){ - Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) -> - BatchNorm() -> - Relu(?=act) - } - def skip(channels, stride){ - Convolution(kernel=(1,1), channels=false, stride=(stride,stride)) -> - BatchNorm() - } - def resLayer(channels, stride=1){ - ( - conv(kernel=3, channels=channels, stride=stride) -> - conv(kernel=3, channels=channels, stride=stride, act=false) - | - skip(channels=channels, stride=stride, ?=(stride!=1)) - ) -> - Add() -> - Relu() - } - - image -> - conv(kernel=7, channels=64, stride=2) -> - Pooling(pool_type="max", kernel=(3,3), stride=(2,2), padding="valid") -> - resLayer(channels=64, ->=3) -> - resLayer(channels=128, stride=2) -> - GlobalPooling(pool_type="avg") -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} diff --git a/src/test/resources/invalid_tests/DuplicatedArgument.cnna b/src/test/resources/invalid_tests/DuplicatedArgument.cnna deleted file mode 100644 index 6f885ac2d870ea5defa47394e835e82b921629c6..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/DuplicatedArgument.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture DuplicatedArgument(){ - def input Q(-oo:+oo)^{10} in1 - def output Q(0:1)^{2} out1 - - in1 -> - FullyConnected(units=64, units=32) -> - Tanh() -> - FullyConnected(units=2) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/DuplicatedIONames.cnna b/src/test/resources/invalid_tests/DuplicatedIONames.cnna deleted file mode 100644 index 2940f406a499d2b76377266624025a6e353625b0..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/DuplicatedIONames.cnna +++ /dev/null @@ -1,16 +0,0 @@ -architecture DuplicatedIONames(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - def fc(){ - FullyConnected(units=64) -> - Tanh() - } - - in1 -> - fc() -> - FullyConnected(units=classes) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/DuplicatedNames.cnna b/src/test/resources/invalid_tests/DuplicatedNames.cnna deleted file mode 100644 index 1fbf822b9ed6149945d3f05d77684aebdb660d56..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/DuplicatedNames.cnna +++ /dev/null @@ -1,20 +0,0 @@ -architecture DuplicatedNames(inputs=10, inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - def fc(){ - FullyConnected(units=64) -> - Tanh() - } - - def fc(){ - FullyConnected(units=64) -> - Tanh() - } - - in1 -> - fc() -> - FullyConnected(units=classes) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/IllegalIOName.cnna b/src/test/resources/invalid_tests/IllegalIOName.cnna deleted file mode 100644 index cd2d66c6eaad39688620def9b778be4f56613ae8..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/IllegalIOName.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture IllegalIOName{ - def input Q(-oo:+oo)^{10} data_ - def output Q(0:1)^{2} predictions_ - - data_ -> - FullyConnected(units=64, no_bias=true) -> - Tanh() -> - FullyConnected(units=2, no_bias=true) -> - Softmax() -> - predictions_ -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/IllegalName.cnna b/src/test/resources/invalid_tests/IllegalName.cnna deleted file mode 100644 index ed8072165b2f326eb2a99a7206cd2b1676b42f33..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/IllegalName.cnna +++ /dev/null @@ -1,15 +0,0 @@ -architecture IllegalName(inputs=10, classes=2, Tg = 1){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - def Fc(){ - FullyConnected(units=10) - } - - in1 -> - FullyConnected(units=64) -> - Tanh() -> - FullyConnected(units=classes) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/InvalidArrayAccessValue.cnna b/src/test/resources/invalid_tests/InvalidArrayAccessValue.cnna deleted file mode 100644 index 1901cd81c1a71c5904493455cb5dca3e4e6486a9..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/InvalidArrayAccessValue.cnna +++ /dev/null @@ -1,27 +0,0 @@ -architecture InvalidArrayAccessValue(img_height=200, img_width=300, img_channels=3, classes=3){ - def input Z(0:255)^{img_channels, img_height, img_width} image[3] - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels){ - Convolution(kernel=kernel, channels=channels) -> - Relu() - } - - def inputGroup(index){ - [index] -> - conv(kernel=(3,3), channels=32, ->=3) -> - Pooling(pool_type="max", kernel=(2,2), stride=(2,2)) - } - - (image[0] | image[1] | image[2] | image[3]) -> - inputGroup(index=[0|..|2]) -> - Concatenate() -> - conv(kernel=(3,3), channels=64) -> - Pooling(pool_type="max", kernel=(2,2), stride=(2,2)) -> - - FullyConnected(units=32) -> - Relu() -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} diff --git a/src/test/resources/invalid_tests/InvalidIOShape1.cnna b/src/test/resources/invalid_tests/InvalidIOShape1.cnna deleted file mode 100644 index 3f03ce0919dc87e763133d7a4dfb783066379ec7..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/InvalidIOShape1.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture InvalidIOShape1(){ - def input Q(-oo:+oo)^{10, 2} in1 - def output Q(0:1)^{10, 2, 2, 2} out1 - - in1 -> - FullyConnected(units=64) -> - Tanh() -> - FullyConnected(units=10) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/InvalidIOShape2.cnna b/src/test/resources/invalid_tests/InvalidIOShape2.cnna deleted file mode 100644 index 3e746f60ca5a9ff54d6902c35bdadb342e9cac1e..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/InvalidIOShape2.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture InvalidIOShape2(){ - def input Q(-oo:+oo)^{10.5} in1 - def output Q(0:1)^{-10} out1 - - in1 -> - FullyConnected(units=64) -> - Tanh() -> - FullyConnected(units=10) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/InvalidInputShape.cnna b/src/test/resources/invalid_tests/InvalidInputShape.cnna deleted file mode 100644 index 9fd7acb112637bbc70da161c430e173f082dcc35..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/InvalidInputShape.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture InvalidInputShape(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1[2] - def output Q(0:1)^{classes} out1[2] - - in1 -> - FullyConnected(units=64) -> - Tanh() -> - FullyConnected(units=classes) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/InvalidRecursion.cnna b/src/test/resources/invalid_tests/InvalidRecursion.cnna deleted file mode 100644 index 188eaa9b0e9184a035e516b3e940d35a7beb7d3b..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/InvalidRecursion.cnna +++ /dev/null @@ -1,40 +0,0 @@ -architecture InvalidRecursion(img_height=224, img_width=224, img_channels=3, classes=1000){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, stride=1, act=true){ - Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) -> - BatchNorm() -> - resLayer(channels = 8) -> - Relu(?=act) - } - def skip(channels, stride){ - Convolution(kernel=(1,1), channels=channels, stride=(stride,stride)) -> - BatchNorm() - } - def resLayer(channels, stride=1){ - ( - conv(kernel=3, channels=channels, stride=stride) -> - conv(kernel=3, channels=channels, stride=stride, act=false) - | - skip(channels=channels, stride=stride, ?=(stride!=1)) - ) -> - Add() -> - Relu() - } - - image -> - conv(kernel=7, channels=64, stride=2) -> - Pooling(pool_type="max", kernel=(3,3), stride=(2,2)) -> - resLayer(channels=64, ->=3) -> - resLayer(channels=128, stride=2) -> - resLayer(channels=128, ->=3) -> - resLayer(channels=256, stride=2) -> - resLayer(channels=256, ->=5) -> - resLayer(channels=512, stride=2) -> - resLayer(channels=512, ->=2) -> - GlobalPooling(pool_type="avg") -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} diff --git a/src/test/resources/invalid_tests/MissingArgument.cnna b/src/test/resources/invalid_tests/MissingArgument.cnna deleted file mode 100644 index 88441c4ef82e0c241d431252c6c2219e619fe878..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/MissingArgument.cnna +++ /dev/null @@ -1,34 +0,0 @@ -architecture MissingArgument(img_height=224, img_width=224, img_channels=3, classes=1000){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, stride=1, act=true){ - Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) -> - BatchNorm() -> - Relu(?=act) - } - def skip(channels, stride){ - Convolution(channels=96, stride=(stride,stride)) -> - BatchNorm() - } - def resLayer(channels, stride=1){ - ( - conv(kernel=3, channels=channels, stride=stride) -> - conv(kernel=3, channels=channels, stride=stride, act=false) - | - skip(channels=channels, stride=stride, ?=(stride!=1)) - ) -> - Add() -> - Relu() - } - - image -> - conv(kernel=7, stride=2) -> - Pooling(pool_type="max") -> - resLayer(channels=64, ->=3) -> - resLayer(channels=128, stride=2) -> - GlobalPooling(pool_type="avg") -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/MissingIO2.cnna b/src/test/resources/invalid_tests/MissingIO2.cnna deleted file mode 100644 index c82202cf1adba46fa4696dfb5517ce0d3d074aaa..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/MissingIO2.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture MissingIO2(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1[2] - def output Q(0:1)^{classes} out1[2] - - in1[0] -> - FullyConnected(units=64, no_bias=true) -> - Tanh() -> - FullyConnected(units=classes, no_bias=true) -> - Softmax() -> - out1[0] -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/MissingLayerOperator.cnna b/src/test/resources/invalid_tests/MissingLayerOperator.cnna deleted file mode 100644 index 6cea4a6e78a65f88b63dc536157d7ff48da829c0..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/MissingLayerOperator.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture MissingLayerOperator(){ - def input Q(-oo:+oo)^{10} in1 - def output Q(0:1)^{2} out1 - - in1 -> - FullyConnected(units=64, no_bias=true) -> - Tanh() - FullyConnected(units=2, no_bias=true) - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/MissingMerge.cnna b/src/test/resources/invalid_tests/MissingMerge.cnna deleted file mode 100644 index d2fb2e20e7da6374b1a68ffb88e65855357adcd6..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/MissingMerge.cnna +++ /dev/null @@ -1,24 +0,0 @@ -architecture MissingMerge(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - in1 -> - ( - ( - FullyConnected(units=16) - | - FullyConnected(units=16) - ) - | - ( - FullyConnected(units=16) - | - FullyConnected(units=16) - ) - ) -> - Add() -> - Tanh() -> - FullyConnected(units=classes) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/MissingParallelBrackets.cnna b/src/test/resources/invalid_tests/MissingParallelBrackets.cnna deleted file mode 100644 index e8cacb56ac7e4756d2366e9a24ccbdfed6513983..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/MissingParallelBrackets.cnna +++ /dev/null @@ -1,45 +0,0 @@ -architecture MissingParallelBrackets(img_height=224, img_width=224, img_channels=3, classes=10){ - def input Z(0:255)^{img_channels, img_height, img_width} image - def output Q(0:1)^{classes} predictions - - def conv(kernel, channels, hasPool=true, convStride=(1,1)){ - Convolution(kernel=kernel, channels=channels, stride=convStride) -> - Relu() -> - Pooling(pool_type="max", kernel=(3,3), stride=(2,2), ?=hasPool) - } - def fc(){ - FullyConnected(units=4096) -> - Relu() -> - Dropout() - } - - image -> - conv(kernel=(11,11), channels=96, convStride=(4,4)) -> - Lrn(nsize=5, alpha=0.0001, beta=0.75) -> - - SplitData(index=0, n=2) -> - conv(kernel=(5,5), channels=128) -> - Lrn(nsize=5, alpha=0.0001, beta=0.75) - | - SplitData(index=1, n=2) -> - conv(kernel=(5,5), channels=128) -> - Lrn(nsize=5, alpha=0.0001, beta=0.75) - -> - - conv(kernel=(3,3), channels=384 ,hasPool=false) -> - - SplitData(index=0, n=2) -> - conv(kernel=(3,3), channels=192, hasPool=false) -> - conv(kernel=(3,3), channels=128) - | - SplitData(index=1, n=2) -> - conv(kernel=(3,3), channels=192, hasPool=false) -> - conv(kernel=(3,3), channels=128) - -> - - fc() -> - fc() -> - FullyConnected(units=classes) -> - Softmax() -> - predictions -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/NotIOArray.cnna b/src/test/resources/invalid_tests/NotIOArray.cnna deleted file mode 100644 index a1f16d82d7eb05da499fb48fb447a8c7b0b6e039..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/NotIOArray.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture NotIOArray(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - in1[1] -> - FullyConnected(units=64, no_bias=true) -> - Tanh() -> - FullyConnected(units=classes, no_bias=true) -> - Softmax() -> - out1[0] -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/UnfinishedArchitecture.cnna b/src/test/resources/invalid_tests/UnfinishedArchitecture.cnna deleted file mode 100644 index 2f806bbdebad82b494fcffd4f40e56356f7643b9..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/UnfinishedArchitecture.cnna +++ /dev/null @@ -1,15 +0,0 @@ -architecture UnfinishedArchitecture(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - in1 -> - FullyConnected(units=64, no_bias=true) -> - Tanh() -> - ( - FullyConnected(units=classes, no_bias=true) -> - Softmax() -> - out1 - | - - ) -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/UnknownIO.cnna b/src/test/resources/invalid_tests/UnknownIO.cnna deleted file mode 100644 index 409870861f93de1886f0d436fdb2e5ae72abac98..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/UnknownIO.cnna +++ /dev/null @@ -1,8 +0,0 @@ -architecture UnknownIO(){ - in1 -> - FullyConnected(units=64) -> - Tanh() -> - FullyConnected(units=10) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/UnknownMethod.cnna b/src/test/resources/invalid_tests/UnknownMethod.cnna deleted file mode 100644 index ec87f5e46e351df85bc672e4d0d7aa049a1d0ffd..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/UnknownMethod.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture UnknownMethod(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - in1 -> - FllyConnected(units=64, no_bias=true) -> - Tanh() -> - FullyConnected(units=classes, no_bias=true) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/UnknownVariableName.cnna b/src/test/resources/invalid_tests/UnknownVariableName.cnna deleted file mode 100644 index 9f79070a29ada2190edd0ffbfafa84afe395308c..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/UnknownVariableName.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture UnknownVariableName(inputs=10){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{2} out1 - - in1 -> - FullyConnected(units=64) -> - Tanh() -> - FullyConnected(units=classes) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/WrongArgument.cnna b/src/test/resources/invalid_tests/WrongArgument.cnna deleted file mode 100644 index 893b4ce5b2278b64c41bf65325417d0383d7d64b..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/WrongArgument.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture WrongArgument(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - in1 -> - FullyConnected(units=64, bias=true) -> - Tanh(asd=1) -> - FullyConnected(unit=classes) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/WrongIOType.cnna b/src/test/resources/invalid_tests/WrongIOType.cnna deleted file mode 100644 index 11dae442e88949c498fd0510c192d4eb509b98f0..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/WrongIOType.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture WrongIOType(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - in1 -> - FullyConnected(units=64, no_bias=true) -> - Tanh() -> - FullyConnected(units=classes, no_bias=true) -> - Relu() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/invalid_tests/WrongRangeOperator.cnna b/src/test/resources/invalid_tests/WrongRangeOperator.cnna deleted file mode 100644 index d6ddac77f9ccb13988c0d92ece35b702cc365d1e..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid_tests/WrongRangeOperator.cnna +++ /dev/null @@ -1,11 +0,0 @@ -architecture WrongRangeOperator(inputs=10, classes=2){ - def input Q(-oo:+oo)^{inputs} in1 - def output Q(0:1)^{classes} out1 - - in1 -> - FullyConnected(units=[64->..|65]) -> - Tanh() -> - FullyConnected(units=[classes |..-> classes + 1] ) -> - Softmax() -> - out1 -} \ No newline at end of file diff --git a/src/test/resources/valid_tests/Alexnet_alt.cnna b/src/test/resources/valid_tests/Alexnet_alt.cnna index 9a27ff0662b09fa312505a8d97cd0916326b2558..edb3e40472b837bdbc0ca2771414334e4c5aeecc 100644 --- a/src/test/resources/valid_tests/Alexnet_alt.cnna +++ b/src/test/resources/valid_tests/Alexnet_alt.cnna @@ -49,5 +49,5 @@ architecture Alexnet_alt(img_height=224, img_width=224, img_channels=3, classes= Dropout() -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/Alexnet_alt2.cnna b/src/test/resources/valid_tests/Alexnet_alt2.cnna index fab6f88ff515e689fa468498b0d5f80f3062a788..66248a9a0d751ce0c50e1926275a4606380a51a1 100644 --- a/src/test/resources/valid_tests/Alexnet_alt2.cnna +++ b/src/test/resources/valid_tests/Alexnet_alt2.cnna @@ -35,5 +35,5 @@ architecture Alexnet_alt2(img_height=224, img_width=224, img_channels=3, classes fc(-> = 2) -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/ArgumentSequenceTest.cnna b/src/test/resources/valid_tests/ArgumentSequenceTest.cnna index 28e95e1ff40874f20c7c32d939b4b000be4cfd32..bf695c4a211ce5ca413367a57be5e5d09fc1c71c 100644 --- a/src/test/resources/valid_tests/ArgumentSequenceTest.cnna +++ b/src/test/resources/valid_tests/ArgumentSequenceTest.cnna @@ -9,5 +9,5 @@ architecture ArgumentSequenceTest { Concatenate() -> FullyConnected(units=10) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/CifarClassifierNetwork.cnna b/src/test/resources/valid_tests/CifarClassifierNetwork.cnna index 5eba01404eda879e2b48ff02c975e077fa2de05d..25f351152d97d750511ab3672b76d47b4468d7c7 100644 --- a/src/test/resources/valid_tests/CifarClassifierNetwork.cnna +++ b/src/test/resources/valid_tests/CifarClassifierNetwork.cnna @@ -31,5 +31,5 @@ architecture CifarClassifierNetwork(classes=10){ Dropout()-> FullyConnected(units=classes) -> Softmax() -> - softmax + softmax; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/Fixed_Alexnet.cnna b/src/test/resources/valid_tests/Fixed_Alexnet.cnna index 656e6186c7471dfc97af709b457dd55b2eaa2bd0..992a3adbb33be184cd61755f6cdc29064e81c11f 100644 --- a/src/test/resources/valid_tests/Fixed_Alexnet.cnna +++ b/src/test/resources/valid_tests/Fixed_Alexnet.cnna @@ -39,5 +39,5 @@ architecture Fixed_Alexnet(){ fc(->=2) -> FullyConnected(units=10) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/Fixed_ThreeInputCNN_M14.cnna b/src/test/resources/valid_tests/Fixed_ThreeInputCNN_M14.cnna index 8fe709e1152302bf1176a47366fc8f3bc04f99f5..f65be3742ac2b01cb71ea264ecdf30c0d6460def 100644 --- a/src/test/resources/valid_tests/Fixed_ThreeInputCNN_M14.cnna +++ b/src/test/resources/valid_tests/Fixed_ThreeInputCNN_M14.cnna @@ -23,5 +23,5 @@ architecture Fixed_ThreeInputCNN_M14(){ Relu() -> FullyConnected(units=3) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/MultipleOutputs.cnna b/src/test/resources/valid_tests/MultipleOutputs.cnna index 2682693ff363cc25c481906028c5ffa5144f63d5..a7b7eff825f35f9499815de62aa5c9108d9834e0 100644 --- a/src/test/resources/valid_tests/MultipleOutputs.cnna +++ b/src/test/resources/valid_tests/MultipleOutputs.cnna @@ -16,6 +16,6 @@ architecture MultipleOutputs{ FullyConnected(units=4, no_bias=true) -> Softmax() ) -> - pred + pred; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/MultipleStreams.cnna b/src/test/resources/valid_tests/MultipleStreams.cnna new file mode 100644 index 0000000000000000000000000000000000000000..e0c5010a85d2e7ff70abeb77d77f4a708b7ee0d4 --- /dev/null +++ b/src/test/resources/valid_tests/MultipleStreams.cnna @@ -0,0 +1,14 @@ +architecture MultipleStreams{ + def input Q(-oo:+oo)^{10} data[2] + def output Q(0:1)^{4} pred[2] + + data[0] -> + FullyConnected(units=4, no_bias=true) -> + Softmax() -> + pred[0]; + + data[1] -> + FullyConnected(units=4, no_bias=true) -> + Softmax() -> + pred[1]; +} \ No newline at end of file diff --git a/src/test/resources/valid_tests/ResNeXt50_InstanceTest.cnna b/src/test/resources/valid_tests/ResNeXt50_InstanceTest.cnna index ad939bff566cd018f41656db07cbacdfc3d9c671..07b67e0720b1a48edc4ebb264e5a559eb4a91903 100644 --- a/src/test/resources/valid_tests/ResNeXt50_InstanceTest.cnna +++ b/src/test/resources/valid_tests/ResNeXt50_InstanceTest.cnna @@ -40,5 +40,5 @@ architecture ResNeXt50_InstanceTest(img_height=224, img_width=224, img_channels= GlobalPooling(pool_type="avg") -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/ResNeXt50_alt.cnna b/src/test/resources/valid_tests/ResNeXt50_alt.cnna index 6fa681bd748046e38968704c789c0549e979a499..f3afac0e5c2328bac739409df2acfa3d547d8d0c 100644 --- a/src/test/resources/valid_tests/ResNeXt50_alt.cnna +++ b/src/test/resources/valid_tests/ResNeXt50_alt.cnna @@ -42,5 +42,5 @@ architecture ResNeXt50_alt(img_height=224, img_width=224, img_channels=3, classe GlobalPooling(pool_type="avg") -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/ResNet152_alt.cnna b/src/test/resources/valid_tests/ResNet152_alt.cnna index dfba32db4d4ca996d2284a08d5cc23d529fd735c..23c06015855ef851c283b8a55e0303b3a63da7ae 100644 --- a/src/test/resources/valid_tests/ResNet152_alt.cnna +++ b/src/test/resources/valid_tests/ResNet152_alt.cnna @@ -36,5 +36,5 @@ architecture ResNet152_alt(img_height=224, img_width=224, img_channels=3, classe GlobalPooling(pool_type="avg") -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/SimpleNetworkLinear.cnna b/src/test/resources/valid_tests/SimpleNetworkLinear.cnna index cbb8a38bc79bfc28550aef7f6ede8755de278d04..2eabd3355d4f221a094e72074a7fe7f6eeed5468 100644 --- a/src/test/resources/valid_tests/SimpleNetworkLinear.cnna +++ b/src/test/resources/valid_tests/SimpleNetworkLinear.cnna @@ -6,5 +6,5 @@ architecture SimpleNetworkLinear(inputs=10, classes=2){ FullyConnected(units=64, no_bias=true) -> Tanh() -> FullyConnected(units=classes, no_bias=true) -> - out1 + out1; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/SimpleNetworkRelu.cnna b/src/test/resources/valid_tests/SimpleNetworkRelu.cnna index 9d8354ce52cfd5e3695842e303ec748e03ba3de2..459187c78670910ad2c97031dccda6831181220f 100644 --- a/src/test/resources/valid_tests/SimpleNetworkRelu.cnna +++ b/src/test/resources/valid_tests/SimpleNetworkRelu.cnna @@ -7,5 +7,5 @@ architecture SimpleNetworkRelu(inputs=10, classes=2){ Tanh() -> FullyConnected(units=classes, no_bias=true) -> Relu() -> - out1 + out1; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/SimpleNetworkSigmoid.cnna b/src/test/resources/valid_tests/SimpleNetworkSigmoid.cnna index 08098a6bb67116d5b7b6d157c843c94aed593f99..d938be2c339724e74d7fc46d3292da4dc5430723 100644 --- a/src/test/resources/valid_tests/SimpleNetworkSigmoid.cnna +++ b/src/test/resources/valid_tests/SimpleNetworkSigmoid.cnna @@ -7,5 +7,5 @@ architecture SimpleNetworkSigmoid(inputs=10, classes=2){ Tanh() -> FullyConnected(units=classes, no_bias=true) -> Sigmoid() -> - out1 + out1; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/SimpleNetworkSoftmax.cnna b/src/test/resources/valid_tests/SimpleNetworkSoftmax.cnna index 5c0643c8d658bc48aef4a7a11b038b0cd99d11f4..2feb4f721981c2302b388ca14a6ab63401b10a52 100644 --- a/src/test/resources/valid_tests/SimpleNetworkSoftmax.cnna +++ b/src/test/resources/valid_tests/SimpleNetworkSoftmax.cnna @@ -7,5 +7,5 @@ architecture SimpleNetworkSoftmax(inputs=10, classes=2){ Tanh() -> FullyConnected(units=classes, no_bias=true) -> Softmax() -> - out1 + out1; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/SimpleNetworkTanh.cnna b/src/test/resources/valid_tests/SimpleNetworkTanh.cnna index bd1ffec3b65d7430fd375f183e51b197f39dcd2d..f62e20e4ba3f4259b5cc794407b76c5fa143cfa6 100644 --- a/src/test/resources/valid_tests/SimpleNetworkTanh.cnna +++ b/src/test/resources/valid_tests/SimpleNetworkTanh.cnna @@ -7,5 +7,5 @@ architecture SimpleNetworkTanh(inputs=10, classes=2){ Tanh() -> FullyConnected(units=classes, no_bias=true) -> Tanh() -> - out1 + out1; } \ No newline at end of file diff --git a/src/test/resources/valid_tests/ThreeInputCNN_M14_alternative.cnna b/src/test/resources/valid_tests/ThreeInputCNN_M14_alternative.cnna index 5b73e1d15d63d6d16bf7cc1f33e1b263a6562fdb..054a53c09c2168ca7123ef32cf680e5f2c1e6ace 100644 --- a/src/test/resources/valid_tests/ThreeInputCNN_M14_alternative.cnna +++ b/src/test/resources/valid_tests/ThreeInputCNN_M14_alternative.cnna @@ -28,5 +28,5 @@ architecture ThreeInputCNN_M14_alternative(img_height=200, img_width=300, img_ch Relu() -> FullyConnected(units=classes) -> Softmax() -> - predictions + predictions; } diff --git a/src/test/resources/valid_tests/data_paths.txt b/src/test/resources/valid_tests/data_paths.txt index 25531c98c1ec86faa46e5e2c9a846908e0073f09..877fea8a80003deb0e855e833d3452b869ce0d23 100644 --- a/src/test/resources/valid_tests/data_paths.txt +++ b/src/test/resources/valid_tests/data_paths.txt @@ -3,4 +3,5 @@ CifarClassifierNetwork data/CifarClassifierNetwork ThreeInputCNN_M14 data/ThreeInputCNN_M14 Alexnet data/Alexnet MultipleOutputs data/MultipleOutputs -ResNeXt50 data/ResNeXt50 \ No newline at end of file +ResNeXt50 data/ResNeXt50 +MultipleStreams data/MultipleStreams \ No newline at end of file