| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include "layer/eltwise.h" |
| | #include "testutil.h" |
| |
|
| | static void print_float_array(const ncnn::Mat& a) |
| | { |
| | fprintf(stderr, "["); |
| | for (int i = 0; i < a.w; i++) |
| | { |
| | fprintf(stderr, " %f", a[i]); |
| | } |
| | fprintf(stderr, " ]"); |
| | } |
| |
|
| | static int test_eltwise(const std::vector<ncnn::Mat>& a, int op_type, const ncnn::Mat& coeffs) |
| | { |
| | ncnn::ParamDict pd; |
| | pd.set(0, op_type); |
| | pd.set(1, coeffs); |
| |
|
| | std::vector<ncnn::Mat> weights(0); |
| |
|
| | int ret = test_layer<ncnn::Eltwise>("Eltwise", pd, weights, a); |
| | if (ret != 0) |
| | { |
| | fprintf(stderr, "test_eltwise failed a[0].dims=%d a[0]=(%d %d %d %d) op_type=%d", a[0].dims, a[0].w, a[0].h, a[0].d, a[0].c, op_type); |
| | fprintf(stderr, " coeffs="); |
| | print_float_array(coeffs); |
| | fprintf(stderr, "\n"); |
| | } |
| |
|
| | return ret; |
| | } |
| |
|
| | static int test_eltwise_0() |
| | { |
| | std::vector<ncnn::Mat> a(2); |
| | a[0] = RandomMat(16, 12, 12); |
| | a[1] = RandomMat(16, 12, 12); |
| |
|
| | std::vector<ncnn::Mat> b(2); |
| | b[0] = RandomMat(15, 11, 24); |
| | b[1] = RandomMat(15, 11, 24); |
| |
|
| | std::vector<ncnn::Mat> c(2); |
| | c[0] = RandomMat(9, 5, 7); |
| | c[1] = RandomMat(9, 5, 7); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| | || test_eltwise(b, 0, ncnn::Mat()) |
| | || test_eltwise(b, 1, ncnn::Mat()) |
| | || test_eltwise(b, 2, ncnn::Mat()) |
| | || test_eltwise(c, 0, ncnn::Mat()) |
| | || test_eltwise(c, 1, ncnn::Mat()) |
| | || test_eltwise(c, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(2)) |
| | || test_eltwise(a, 1, RandomMat(2)) |
| | || test_eltwise(a, 2, RandomMat(2)) |
| | || test_eltwise(b, 0, RandomMat(2)) |
| | || test_eltwise(b, 1, RandomMat(2)) |
| | || test_eltwise(b, 2, RandomMat(2)) |
| | || test_eltwise(c, 0, RandomMat(2)) |
| | || test_eltwise(c, 1, RandomMat(2)) |
| | || test_eltwise(c, 2, RandomMat(2)); |
| | } |
| |
|
| | static int test_eltwise_1() |
| | { |
| | std::vector<ncnn::Mat> a(3); |
| | a[0] = RandomMat(15, 11, 16); |
| | a[1] = RandomMat(15, 11, 16); |
| | a[2] = RandomMat(15, 11, 16); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(3)) |
| | || test_eltwise(a, 1, RandomMat(3)) |
| | || test_eltwise(a, 2, RandomMat(3)); |
| | } |
| |
|
| | static int test_eltwise_2() |
| | { |
| | std::vector<ncnn::Mat> a(4); |
| | a[0] = RandomMat(7, 3, 5); |
| | a[1] = RandomMat(7, 3, 5); |
| | a[2] = RandomMat(7, 3, 5); |
| | a[3] = RandomMat(7, 3, 5); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(4)) |
| | || test_eltwise(a, 1, RandomMat(4)) |
| | || test_eltwise(a, 2, RandomMat(4)); |
| | } |
| |
|
| | static int test_eltwise_3() |
| | { |
| | std::vector<ncnn::Mat> a(5); |
| | a[0] = RandomMat(12, 4, 16); |
| | a[1] = RandomMat(12, 4, 16); |
| | a[2] = RandomMat(12, 4, 16); |
| | a[3] = RandomMat(12, 4, 16); |
| | a[4] = RandomMat(12, 4, 16); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(5)) |
| | || test_eltwise(a, 1, RandomMat(5)) |
| | || test_eltwise(a, 2, RandomMat(5)); |
| | } |
| |
|
| | static int test_eltwise_4() |
| | { |
| | std::vector<ncnn::Mat> a(2); |
| | a[0] = RandomMat(16, 12); |
| | a[1] = RandomMat(16, 12); |
| |
|
| | std::vector<ncnn::Mat> b(2); |
| | b[0] = RandomMat(11, 24); |
| | b[1] = RandomMat(11, 24); |
| |
|
| | std::vector<ncnn::Mat> c(2); |
| | c[0] = RandomMat(9, 7); |
| | c[1] = RandomMat(9, 7); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| | || test_eltwise(b, 0, ncnn::Mat()) |
| | || test_eltwise(b, 1, ncnn::Mat()) |
| | || test_eltwise(b, 2, ncnn::Mat()) |
| | || test_eltwise(c, 0, ncnn::Mat()) |
| | || test_eltwise(c, 1, ncnn::Mat()) |
| | || test_eltwise(c, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(2)) |
| | || test_eltwise(a, 1, RandomMat(2)) |
| | || test_eltwise(a, 2, RandomMat(2)) |
| | || test_eltwise(b, 0, RandomMat(2)) |
| | || test_eltwise(b, 1, RandomMat(2)) |
| | || test_eltwise(b, 2, RandomMat(2)) |
| | || test_eltwise(c, 0, RandomMat(2)) |
| | || test_eltwise(c, 1, RandomMat(2)) |
| | || test_eltwise(c, 2, RandomMat(2)); |
| | } |
| |
|
| | static int test_eltwise_5() |
| | { |
| | std::vector<ncnn::Mat> a(3); |
| | a[0] = RandomMat(15, 16); |
| | a[1] = RandomMat(15, 16); |
| | a[2] = RandomMat(15, 16); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(3)) |
| | || test_eltwise(a, 1, RandomMat(3)) |
| | || test_eltwise(a, 2, RandomMat(3)); |
| | } |
| |
|
| | static int test_eltwise_6() |
| | { |
| | std::vector<ncnn::Mat> a(4); |
| | a[0] = RandomMat(7, 5); |
| | a[1] = RandomMat(7, 5); |
| | a[2] = RandomMat(7, 5); |
| | a[3] = RandomMat(7, 5); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(4)) |
| | || test_eltwise(a, 1, RandomMat(4)) |
| | || test_eltwise(a, 2, RandomMat(4)); |
| | } |
| |
|
| | static int test_eltwise_7() |
| | { |
| | std::vector<ncnn::Mat> a(5); |
| | a[0] = RandomMat(12, 16); |
| | a[1] = RandomMat(12, 16); |
| | a[2] = RandomMat(12, 16); |
| | a[3] = RandomMat(12, 16); |
| | a[4] = RandomMat(12, 16); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(5)) |
| | || test_eltwise(a, 1, RandomMat(5)) |
| | || test_eltwise(a, 2, RandomMat(5)); |
| | } |
| |
|
| | static int test_eltwise_8() |
| | { |
| | std::vector<ncnn::Mat> a(2); |
| | a[0] = RandomMat(12); |
| | a[1] = RandomMat(12); |
| |
|
| | std::vector<ncnn::Mat> b(2); |
| | b[0] = RandomMat(24); |
| | b[1] = RandomMat(24); |
| |
|
| | std::vector<ncnn::Mat> c(2); |
| | c[0] = RandomMat(19); |
| | c[1] = RandomMat(19); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| | || test_eltwise(b, 0, ncnn::Mat()) |
| | || test_eltwise(b, 1, ncnn::Mat()) |
| | || test_eltwise(b, 2, ncnn::Mat()) |
| | || test_eltwise(c, 0, ncnn::Mat()) |
| | || test_eltwise(c, 1, ncnn::Mat()) |
| | || test_eltwise(c, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(2)) |
| | || test_eltwise(a, 1, RandomMat(2)) |
| | || test_eltwise(a, 2, RandomMat(2)) |
| | || test_eltwise(b, 0, RandomMat(2)) |
| | || test_eltwise(b, 1, RandomMat(2)) |
| | || test_eltwise(b, 2, RandomMat(2)) |
| | || test_eltwise(c, 0, RandomMat(2)) |
| | || test_eltwise(c, 1, RandomMat(2)) |
| | || test_eltwise(c, 2, RandomMat(2)); |
| | } |
| |
|
| | static int test_eltwise_9() |
| | { |
| | std::vector<ncnn::Mat> a(3); |
| | a[0] = RandomMat(36); |
| | a[1] = RandomMat(36); |
| | a[2] = RandomMat(36); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(3)) |
| | || test_eltwise(a, 1, RandomMat(3)) |
| | || test_eltwise(a, 2, RandomMat(3)); |
| | } |
| |
|
| | static int test_eltwise_10() |
| | { |
| | std::vector<ncnn::Mat> a(4); |
| | a[0] = RandomMat(15); |
| | a[1] = RandomMat(15); |
| | a[2] = RandomMat(15); |
| | a[3] = RandomMat(15); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(4)) |
| | || test_eltwise(a, 1, RandomMat(4)) |
| | || test_eltwise(a, 2, RandomMat(4)); |
| | } |
| |
|
| | static int test_eltwise_11() |
| | { |
| | std::vector<ncnn::Mat> a(5); |
| | a[0] = RandomMat(16); |
| | a[1] = RandomMat(16); |
| | a[2] = RandomMat(16); |
| | a[3] = RandomMat(16); |
| | a[4] = RandomMat(16); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(5)) |
| | || test_eltwise(a, 1, RandomMat(5)) |
| | || test_eltwise(a, 2, RandomMat(5)); |
| | } |
| |
|
| | static int test_eltwise_12() |
| | { |
| | std::vector<ncnn::Mat> a(2); |
| | a[0] = RandomMat(31, 5, 3, 12); |
| | a[1] = RandomMat(31, 5, 3, 12); |
| |
|
| | std::vector<ncnn::Mat> b(3); |
| | b[0] = RandomMat(32, 4, 5, 32); |
| | b[1] = RandomMat(32, 4, 5, 32); |
| | b[2] = RandomMat(32, 4, 5, 32); |
| |
|
| | std::vector<ncnn::Mat> c(4); |
| | c[0] = RandomMat(33, 6, 7, 7); |
| | c[1] = RandomMat(33, 6, 7, 7); |
| | c[2] = RandomMat(33, 6, 7, 7); |
| | c[3] = RandomMat(33, 6, 7, 7); |
| |
|
| | return 0 |
| | || test_eltwise(a, 0, ncnn::Mat()) |
| | || test_eltwise(a, 1, ncnn::Mat()) |
| | || test_eltwise(a, 2, ncnn::Mat()) |
| | || test_eltwise(b, 0, ncnn::Mat()) |
| | || test_eltwise(b, 1, ncnn::Mat()) |
| | || test_eltwise(b, 2, ncnn::Mat()) |
| | || test_eltwise(c, 0, ncnn::Mat()) |
| | || test_eltwise(c, 1, ncnn::Mat()) |
| | || test_eltwise(c, 2, ncnn::Mat()) |
| |
|
| | || test_eltwise(a, 0, RandomMat(2)) |
| | || test_eltwise(a, 1, RandomMat(2)) |
| | || test_eltwise(a, 2, RandomMat(2)) |
| | || test_eltwise(b, 0, RandomMat(3)) |
| | || test_eltwise(b, 1, RandomMat(3)) |
| | || test_eltwise(b, 2, RandomMat(3)) |
| | || test_eltwise(c, 0, RandomMat(4)) |
| | || test_eltwise(c, 1, RandomMat(4)) |
| | || test_eltwise(c, 2, RandomMat(4)); |
| | } |
| |
|
| | int main() |
| | { |
| | SRAND(7767517); |
| |
|
| | return 0 |
| | || test_eltwise_0() |
| | || test_eltwise_1() |
| | || test_eltwise_2() |
| | || test_eltwise_3() |
| | || test_eltwise_4() |
| | || test_eltwise_5() |
| | || test_eltwise_6() |
| | || test_eltwise_7() |
| | || test_eltwise_8() |
| | || test_eltwise_9() |
| | || test_eltwise_10() |
| | || test_eltwise_11() |
| | || test_eltwise_12(); |
| | } |
| |
|