You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

padding.cpp 4.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /**
  2. * \file dnn/test/naive/padding.cpp
  3. * MegEngine is Licensed under the Apache License, Version 2.0 (the "License")
  4. *
  5. * Copyright (c) 2014-2021 Megvii Inc. All rights reserved.
  6. *
  7. * Unless required by applicable law or agreed to in writing,
  8. * software distributed under the License is distributed on an
  9. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. */
  11. #include "test/common/padding.h"
  12. #include "megdnn/dtype.h"
  13. #include "megdnn/oprs.h"
  14. #include "test/common/checker.h"
  15. #include "test/naive/fixture.h"
  16. namespace megdnn{
  17. namespace test{
  18. TEST_F(NAIVE, PADDING) {
  19. std::vector<padding::TestArg> args = padding::get_args();
  20. Checker<Padding> checker(handle());
  21. for(auto&& arg : args){
  22. checker.set_param(arg.param)
  23. .set_dtype(0, dtype::Float32())
  24. .set_dtype(1, dtype::Float32())
  25. .execs({arg.src, arg.dst});
  26. }
  27. }
  28. TEST_F(NAIVE, PADDING_CONSTANT) {
  29. Checker<Padding> checker(handle(), false);
  30. param::Padding param;
  31. param.padding_val = 10;
  32. param.padding_mode = param::Padding::PaddingMode::CONSTANT;
  33. param.front_offset_dim0 = 2;
  34. param.front_offset_dim1 = 1;
  35. param.front_offset_dim2 = 0;
  36. param.front_offset_dim3 = 0;
  37. param.front_offset_dim4 = 0;
  38. param.front_offset_dim5 = 0;
  39. param.front_offset_dim6 = 0;
  40. param.back_offset_dim0 = 2;
  41. param.back_offset_dim1 = 3;
  42. param.back_offset_dim2 = 0;
  43. param.back_offset_dim3 = 0;
  44. param.back_offset_dim4 = 0;
  45. param.back_offset_dim5 = 0;
  46. param.back_offset_dim6 = 0;
  47. checker.set_param(param).exect(
  48. Testcase{TensorValue({1,1}, dtype::Float32(), {1}), {}},
  49. Testcase{{},TensorValue({5,5}, dtype::Float32(), {10,10,10,10,10,10,10,10,10,10,10,1,10,10,10,10,10,10,10,10,10,10,10,10,10})}
  50. );
  51. }
  52. TEST_F(NAIVE, PADDING_REFLECT) {
  53. Checker<Padding> checker(handle(), false);
  54. param::Padding param;
  55. param.padding_val = 10;
  56. param.padding_mode = param::Padding::PaddingMode::REFLECT;
  57. param.front_offset_dim0 = 2;
  58. param.front_offset_dim1 = 0;
  59. param.front_offset_dim2 = 0;
  60. param.front_offset_dim3 = 0;
  61. param.front_offset_dim4 = 0;
  62. param.front_offset_dim5 = 0;
  63. param.front_offset_dim6 = 0;
  64. param.back_offset_dim0 = 3;
  65. param.back_offset_dim1 = 0;
  66. param.back_offset_dim2 = 0;
  67. param.back_offset_dim3 = 0;
  68. param.back_offset_dim4 = 0;
  69. param.back_offset_dim5 = 0;
  70. param.back_offset_dim6 = 0;
  71. checker.set_param(param).exect(
  72. Testcase{TensorValue({5}, dtype::Float32(), {1,2,3,4,5}), {}},
  73. Testcase{{},TensorValue({10}, dtype::Float32(), {3,2,1,2,3,4,5,4,3,2})}
  74. );
  75. }
  76. TEST_F(NAIVE, PADDING_REPLICATE) {
  77. Checker<Padding> checker(handle(), false);
  78. param::Padding param;
  79. param.padding_val = 10;
  80. param.padding_mode = param::Padding::PaddingMode::REPLICATE;
  81. param.front_offset_dim0 = 1;
  82. param.front_offset_dim1 = 0;
  83. param.front_offset_dim2 = 0;
  84. param.front_offset_dim3 = 0;
  85. param.front_offset_dim4 = 0;
  86. param.front_offset_dim5 = 0;
  87. param.front_offset_dim6 = 0;
  88. param.back_offset_dim0 = 2;
  89. param.back_offset_dim1 = 0;
  90. param.back_offset_dim2 = 0;
  91. param.back_offset_dim3 = 0;
  92. param.back_offset_dim4 = 0;
  93. param.back_offset_dim5 = 0;
  94. param.back_offset_dim6 = 0;
  95. checker.set_param(param).exect(
  96. Testcase{TensorValue({9}, dtype::Float32(), {1,2,3,4,5,6,7,8,9}), {}},
  97. Testcase{{},TensorValue({12}, dtype::Float32(), {1,1,2,3,4,5,6,7,8,9,9,9})}
  98. );
  99. }
  100. TEST_F(NAIVE, PADDING_REPLICATE2) {
  101. Checker<Padding> checker(handle(), false);
  102. param::Padding param;
  103. param.padding_val = 10;
  104. param.padding_mode = param::Padding::PaddingMode::REPLICATE;
  105. param.front_offset_dim0 = 2;
  106. param.front_offset_dim1 = 1;
  107. param.front_offset_dim2 = 0;
  108. param.front_offset_dim3 = 0;
  109. param.front_offset_dim4 = 0;
  110. param.front_offset_dim5 = 0;
  111. param.front_offset_dim6 = 0;
  112. param.back_offset_dim0 = 0;
  113. param.back_offset_dim1 = 3;
  114. param.back_offset_dim2 = 0;
  115. param.back_offset_dim3 = 0;
  116. param.back_offset_dim4 = 0;
  117. param.back_offset_dim5 = 0;
  118. param.back_offset_dim6 = 0;
  119. checker.set_param(param).exect(
  120. Testcase{TensorValue({3,3}, dtype::Float32(), {1,2,3,4,5,6,7,8,9}), {}},
  121. Testcase{{},TensorValue({5,7}, dtype::Float32(), {1,1,2,3,3,3,3,1,1,2,3,3,3,3,1,1,2,3,3,3,3,4,4,5,6,6,6,6,7,7,8,9,9,9,9})}
  122. );
  123. }
  124. }
  125. }

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台