[Test/Bn] Add conv2d model test
authorJihoon Lee <jhoon.it.lee@samsung.com>
Fri, 2 Jul 2021 04:12:56 +0000 (13:12 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Mon, 5 Jul 2021 11:34:36 +0000 (20:34 +0900)
This patch adds conv2d bn test which was not properly tested

**Self evaluation:**
1. Build test: [X]Passed [ ]Failed [ ]Skipped
2. Run test: [X]Passed [ ]Failed [ ]Skipped

Signed-off-by: Jihoon Lee <jhoon.it.lee@samsung.com>
packaging/unittest_models.tar.gz
test/input_gen/genModelTests.py
test/input_gen/transLayer.py
test/unittest/unittest_nntrainer_models.cpp

index 0d8adbc..8826b86 100644 (file)
Binary files a/packaging/unittest_models.tar.gz and b/packaging/unittest_models.tar.gz differ
index 41fdfe5..ba759ec 100644 (file)
@@ -233,6 +233,25 @@ if __name__ == "__main__":
         loss_fn_str="cross_softmax",
     )
 
+    record(
+        file_name="conv_bn.info",
+        model=[
+            K.Input(shape=(2, 3, 5)),
+            K.layers.Conv2D(filters=2, kernel_size=(2, 2)),
+            K.layers.BatchNormalization(),
+            K.layers.Activation("relu"),
+            K.layers.Flatten(),
+            K.layers.Dense(10),
+            K.layers.Activation("softmax"),
+        ],
+        optimizer=opt.SGD(learning_rate=0.1),
+        iteration=10,
+        input_shape=(3, 2, 3, 5),
+        label_shape=(3, 10),
+        loss_fn_str="cross_softmax",
+        # debug=["summary", "initial_weights"]
+    )
+
     pool_layer_tc = lambda pool_layer: partial(
         record,
         model=[
index 3a6ddea..b0a29db 100644 (file)
@@ -92,15 +92,6 @@ class IdentityTransLayer(AbstractTransLayer):
 
 
 ##
-# @brief Translayer for batch normalization layer
-class BatchNormTransLayer(IdentityTransLayer):
-    def to_nntr_weights(self, tensorOrList):
-        x = tensorOrList
-        assert len(x) == 4
-        return [x[2], x[3], x[0], x[1]]
-
-
-##
 # @brief Translayer to translate channel last <-> channel first
 # @note This class relies on Permute layer. This should be skipped when
 # iterating through keras layer
@@ -145,6 +136,23 @@ CHANNEL_LAST_LAYERS = (
 )
 
 ##
+# @brief Translayer for batch normalization layer
+class BatchNormTransLayer(IdentityTransLayer):
+    def build(self, input_shape):
+        if len(input_shape) > 3:
+            self.tf_layer = ChannelLastTransLayer(self.tf_layer)
+        self.tf_layer.build(input_shape)
+
+    def call(self, input, training=None):
+        return self.tf_layer(input, training)
+
+    def to_nntr_weights(self, tensorOrList):
+        x = tensorOrList
+        assert len(x) == 4
+        return [x[2], x[3], x[0], x[1]]
+
+
+##
 # @brief Multiout wrapper layer, this class separate gradient
 # to calculate derivative properly
 # when calling, this returns [x] * @a num_output just like output Layer does in NNTrainer
@@ -154,7 +162,7 @@ class MultiOutLayer(IdentityTransLayer):
     # @brief init function
     # @param tf_layer tf_layer to get number of outputs
     # @param num_output explicit number to generate number of output
-    def __init__(self, tf_layer = None, *args, num_output, **kwargs):
+    def __init__(self, tf_layer=None, *args, num_output, **kwargs):
         if not tf_layer:
             tf_layer = K.layers.Layer()
 
@@ -175,6 +183,7 @@ class MultiOutLayer(IdentityTransLayer):
 
         return [layer(tf_output) for layer in self.stub_layers]
 
+
 ##
 # @brief A factory function to attach translayer to existing layer
 # if nothing should be attached, it does not attach the layer
index 781545f..d42590e 100644 (file)
@@ -838,6 +838,20 @@ INI conv_uneven_strides3(
   }
 );
 
+INI conv_bn(
+  "conv_bn",
+  {
+    nn_base + "learning_rate=0.1 | optimizer=sgd | loss=cross | batch_size=3",
+    I("input_layer") + input_base + "input_shape=2:3:5",
+    I("conv2d_c1") + conv_base + "kernel_size = 2,2 | filters=2",
+    I("bn") + bn_base,
+    I("act_1") + relu_base,
+    I("flatten", "type=flatten"),
+    I("outputlayer") + fc_base + "unit = 10",
+    I("act_2") + softmax_base
+  }
+);
+
 
 INI conv_same_padding_multi_stride(
   "conv_same_padding_multi_stride",
@@ -1290,6 +1304,7 @@ INSTANTIATE_TEST_CASE_P(
     mkModelTc(conv_uneven_strides, "3:1:1:10", 10),
     mkModelTc(conv_uneven_strides2, "3:1:1:10", 10),
     mkModelTc(conv_uneven_strides3, "3:1:1:10", 10),
+    mkModelTc(conv_bn, "3:1:1:10", 10),
     mkModelTc(conv_same_padding_multi_stride, "3:1:1:10", 10),
     mkModelTc(conv_no_loss_validate, "3:1:1:10", 1),
     mkModelTc(conv_none_loss_validate, "3:1:1:10", 1),