| 2009 | |
| 2010 | |
| 2011 | void test_more_ops2() |
| 2012 | { |
| 2013 | dlib::rand rnd; |
| 2014 | tt::tensor_rand trand; |
| 2015 | |
| 2016 | for (int iter = 0; iter < 100; ++iter) |
| 2017 | { |
| 2018 | print_spinner(); |
| 2019 | resizable_tensor dest1, dest2, src1, src2; |
| 2020 | src1.set_size(rnd.get_random_32bit_number()%30+1, |
| 2021 | rnd.get_random_32bit_number()%30+1, |
| 2022 | rnd.get_random_32bit_number()%30+1, |
| 2023 | rnd.get_random_32bit_number()%30+1); |
| 2024 | dest1.copy_size(src1); |
| 2025 | dest2.copy_size(src1); |
| 2026 | src2.set_size(1,src1.k(),1,1); |
| 2027 | |
| 2028 | trand.fill_uniform(dest1); |
| 2029 | trand.fill_uniform(dest2); |
| 2030 | trand.fill_uniform(src1); |
| 2031 | trand.fill_uniform(src2); |
| 2032 | |
| 2033 | cpu::multiply_conv(false, dest1, src1, src2); |
| 2034 | cuda::multiply_conv(false, dest2, src1, src2); |
| 2035 | DLIB_TEST(max(abs(mat(dest1)-mat(dest2))) < 1e-5); |
| 2036 | cpu::multiply_conv(true, dest1, src1, src2); |
| 2037 | cuda::multiply_conv(true, dest2, src1, src2); |
| 2038 | DLIB_TEST(max(abs(mat(dest1)-mat(dest2))) < 1e-5); |
| 2039 | |
| 2040 | |
| 2041 | // now try it using the other mode of multiply_conv |
| 2042 | src2.copy_size(src1); |
| 2043 | dest1.set_size(1,src1.k(),1,1); |
| 2044 | dest2.set_size(1,src1.k(),1,1); |
| 2045 | trand.fill_uniform(dest1); |
| 2046 | trand.fill_uniform(dest2); |
| 2047 | trand.fill_uniform(src1); |
| 2048 | trand.fill_uniform(src2); |
| 2049 | cpu::multiply_conv(false, dest1, src1, src2); |
| 2050 | cuda::multiply_conv(false, dest2, src1, src2); |
| 2051 | float scale = max(abs(mat(dest1))); |
| 2052 | float scalem = mean(abs(mat(dest1))); |
| 2053 | DLIB_TEST_MSG(max(abs(mat(dest1)-mat(dest2)))/scale < 1e-4 , max(abs(mat(dest1)-mat(dest2)))/scale); |
| 2054 | DLIB_TEST_MSG(mean(abs(mat(dest1)-mat(dest2)))/scalem < 1e-5 , mean(abs(mat(dest1)-mat(dest2)))/scalem); |
| 2055 | matrix<float> prevd2 = mat(dest2); |
| 2056 | cpu::multiply_conv(false, dest1, src1, src2); |
| 2057 | cuda::multiply_conv(true, dest2, src1, src2); |
| 2058 | scale = max(abs(mat(dest1))); |
| 2059 | scalem = mean(abs(mat(dest1))); |
| 2060 | DLIB_TEST_MSG(max(abs(mat(dest1)-mat(dest2)+prevd2))/scale < 1e-4 , max(abs(mat(dest1)-mat(dest2)+prevd2))/scale); |
| 2061 | DLIB_TEST_MSG(mean(abs(mat(dest1)-mat(dest2)+prevd2))/scalem < 1e-5 , mean(abs(mat(dest1)-mat(dest2)+prevd2))/scalem); |
| 2062 | } |
| 2063 | |
| 2064 | for (int iter = 0; iter < 100; ++iter) |
| 2065 | { |
| 2066 | print_spinner(); |
| 2067 | resizable_tensor dest1, dest2, src, A, B; |
| 2068 | src.set_size(rnd.get_random_32bit_number()%30+1, |
no test coverage detected