if __name__ == "__main__":
fc = K.layers.Dense(5)
- record_single(fc, (3, 1, 1, 10), "fc_golden_plain")
+ record_single(fc, (3, 1, 1, 10), "fc_plain")
fc = K.layers.Dense(4)
- record_single(fc, (1, 1, 1, 10), "fc_golden_single_batch")
+ record_single(fc, (1, 1, 1, 10), "fc_single_batch")
bn = K.layers.BatchNormalization()
- record_single(bn, (2, 4, 2, 3), "bn_golden_channels_training", {"training": True})
- ## @todo add test for inference
- record_single(bn, (2, 4, 2, 3), "bn_golden_channels_inference", {"training": False})
+ record_single(bn, (2, 4, 2, 3), "bn_channels_training", {"training": True})
+ record_single(bn, (2, 4, 2, 3), "bn_channels_inference", {"training": False})
bn = K.layers.BatchNormalization()
- record_single(bn, (2, 10), "bn_golden_width_training", {"training": True})
- record_single(bn, (2, 10), "bn_golden_width_inference", {"training": False})
+ record_single(bn, (2, 10), "bn_width_training", {"training": True})
+ record_single(bn, (2, 10), "bn_width_inference", {"training": False})
-# inspect_file("bn_golden_width_training.nnlayergolden")
+ conv = K.layers.Conv2D(3, 2)
+ record_single(conv, (1, 1, 4, 4), "conv_sb_minimum")
+ record_single(conv, (3, 1, 4, 4), "conv_mb_minimum")
+
+ conv = K.layers.Conv2D(2, 3, padding="same")
+ record_single(conv, (1, 1, 4, 4), "conv_sb_same_remain")
+ record_single(conv, (3, 1, 4, 4), "conv_mb_same_remain")
+
+ conv = K.layers.Conv2D(2, 3, strides=2, padding="same")
+ record_single(conv, (1, 3, 4, 4), "conv_sb_same_uneven_remain")
+ record_single(conv, (3, 3, 4, 4), "conv_mb_same_uneven_remain")
+
+ conv = K.layers.Conv2D(2, 3, strides=2, padding="valid")
+ record_single(conv, (1, 3, 7, 7), "conv_sb_valid_drop_last")
+ record_single(conv, (3, 3, 7, 7), "conv_mb_valid_drop_last")
+
+ conv = K.layers.Conv2D(3, 2, strides=3)
+ record_single(conv, (1, 2, 5, 5), "conv_sb_no_overlap")
+ record_single(conv, (3, 2, 5, 5), "conv_mb_no_overlap")
+
+ conv = K.layers.Conv2D(3, 1, strides=2)
+ record_single(conv, (1, 2, 5, 5), "conv_sb_1x1_kernel")
+ record_single(conv, (3, 2, 5, 5), "conv_mb_1x1_kernel")
+
+inspect_file("conv_sb_no_overlap.nnlayergolden")
auto bn_basic_channels_training = LayerGoldenTestParamType(
nntrainer::createLayer<nntrainer::BatchNormalizationLayer>, {}, "2:4:2:3",
- "bn_golden_channels_training.nnlayergolden",
- LayerGoldenTestParamOptions::DEFAULT);
+ "bn_channels_training.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
auto bn_basic_channels_inference = LayerGoldenTestParamType(
nntrainer::createLayer<nntrainer::BatchNormalizationLayer>, {}, "2:4:2:3",
- "bn_golden_channels_inference.nnlayergolden", bn_inference_option);
+ "bn_channels_inference.nnlayergolden", bn_inference_option);
auto bn_basic_width_training = LayerGoldenTestParamType(
nntrainer::createLayer<nntrainer::BatchNormalizationLayer>, {}, "2:1:1:10",
- "bn_golden_width_training.nnlayergolden",
- LayerGoldenTestParamOptions::DEFAULT);
+ "bn_width_training.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
auto bn_basic_width_inference = LayerGoldenTestParamType(
nntrainer::createLayer<nntrainer::BatchNormalizationLayer>, {}, "2:1:1:10",
- "bn_golden_width_inference.nnlayergolden", bn_inference_option);
+ "bn_width_inference.nnlayergolden", bn_inference_option);
INSTANTIATE_TEST_CASE_P(BatchNormalization, LayerGoldenTest,
::testing::Values(bn_basic_channels_training,
INSTANTIATE_TEST_CASE_P(Convolution2D, LayerSemantics,
::testing::Values(semantic_conv2d));
+
+auto conv_sb_minimum = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {"filters=3", "kernel_size=2,2"}, "1:1:4:4", "conv_sb_minimum.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_minimum = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {"filters=3", "kernel_size=2,2"}, "3:1:4:4", "conv_mb_minimum.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_same_remain = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {"filters=2", "kernel_size=3,3", "padding=same"}, "1:1:4:4",
+ "conv_sb_same_remain.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_same_remain = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {"filters=2", "kernel_size=3,3", "padding=same"}, "3:1:4:4",
+ "conv_mb_same_remain.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_same_uneven_remain_1 = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {
+ "filters=2",
+ "kernel_size=3,3",
+ "stride=2,2",
+ "padding=same",
+ },
+ "1:3:4:4", "conv_sb_same_uneven_remain.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_same_uneven_remain_2 = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {
+ "filters=2",
+ "kernel_size=3,3",
+ "stride=2,2",
+ "padding=0,1,0,1",
+ },
+ "1:3:4:4", "conv_sb_same_uneven_remain.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_same_uneven_remain_1 = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {
+ "filters=2",
+ "kernel_size=3,3",
+ "stride=2,2",
+ "padding=same",
+ },
+ "3:3:4:4", "conv_mb_same_uneven_remain.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_same_uneven_remain_2 = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {
+ "filters=2",
+ "kernel_size=3,3",
+ "stride=2,2",
+ "padding=0,1,0,1",
+ },
+ "3:3:4:4", "conv_mb_same_uneven_remain.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_valid_drop_last =
+ LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {
+ "filters=2",
+ "kernel_size=3,3",
+ "stride=2,2",
+ "padding=valid",
+ },
+ "1:3:7:7", "conv_sb_valid_drop_last.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_valid_drop_last =
+ LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {
+ "filters=2",
+ "kernel_size=3,3",
+ "stride=2,2",
+ "padding=valid",
+ },
+ "3:3:7:7", "conv_mb_valid_drop_last.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_no_overlap = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {"filters=3", "kernel_size=2,2", "stride=3,3"}, "1:2:5:5",
+ "conv_sb_no_overlap.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_no_overlap =
+ LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {
+ "filters=3",
+ "kernel_size=2,2",
+ "stride=3,3",
+ },
+ "3:2:5:5", "conv_mb_no_overlap.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_1x1_kernel = LayerGoldenTestParamType(
+ nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {"filters=3", "kernel_size=1,1", "stride=2,2"}, "1:2:5:5",
+ "conv_sb_1x1_kernel.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_1x1_kernel =
+ LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
+ {
+ "filters=3",
+ "kernel_size=1,1",
+ "stride=2,2",
+ },
+ "3:2:5:5", "conv_mb_1x1_kernel.nnlayergolden",
+ LayerGoldenTestParamOptions::DEFAULT);
+
+INSTANTIATE_TEST_CASE_P(
+ Convolution2D, LayerGoldenTest,
+ ::testing::Values(conv_sb_minimum, conv_mb_minimum, conv_sb_same_remain,
+ conv_mb_same_remain, conv_sb_same_uneven_remain_1,
+ conv_sb_same_uneven_remain_2, conv_mb_same_uneven_remain_1,
+ conv_mb_same_uneven_remain_2, conv_sb_valid_drop_last,
+ conv_mb_valid_drop_last, conv_sb_no_overlap,
+ conv_mb_no_overlap, conv_sb_1x1_kernel,
+ conv_mb_1x1_kernel));
auto fc_basic_plain = LayerGoldenTestParamType(
nntrainer::createLayer<nntrainer::FullyConnectedLayer>, {"unit=5"},
- "3:1:1:10", "fc_golden_plain.nnlayergolden",
- LayerGoldenTestParamOptions::DEFAULT);
+ "3:1:1:10", "fc_plain.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
auto fc_basic_single_batch = LayerGoldenTestParamType(
nntrainer::createLayer<nntrainer::FullyConnectedLayer>, {"unit=4"},
- "1:1:1:10", "fc_golden_single_batch.nnlayergolden",
+ "1:1:1:10", "fc_single_batch.nnlayergolden",
LayerGoldenTestParamOptions::DEFAULT);
INSTANTIATE_TEST_CASE_P(FullyConnected, LayerGoldenTest,