| 1473 | } |
| 1474 | |
| 1475 | void test_conv() |
| 1476 | { |
| 1477 | cuda::tensor_conv conv1; |
| 1478 | cpu::tensor_conv conv2; |
| 1479 | |
| 1480 | dlib::rand prnd; |
| 1481 | for (int iter = 0; iter < 400; ++iter) |
| 1482 | { |
| 1483 | print_spinner(); |
| 1484 | |
| 1485 | resizable_tensor data(prnd.get_random_32bit_number()%5+1, |
| 1486 | prnd.get_random_32bit_number()%5+1, |
| 1487 | prnd.get_random_32bit_number()%25+1, |
| 1488 | prnd.get_random_32bit_number()%25+1 |
| 1489 | ); |
| 1490 | resizable_tensor filters( |
| 1491 | prnd.get_random_32bit_number()%5+1, |
| 1492 | data.k(), |
| 1493 | prnd.get_random_32bit_number()%6+1, |
| 1494 | prnd.get_random_32bit_number()%6+1 |
| 1495 | ); |
| 1496 | |
| 1497 | tt::tensor_rand rnd; |
| 1498 | rnd.fill_uniform(data); |
| 1499 | rnd.fill_uniform(filters); |
| 1500 | |
| 1501 | |
| 1502 | resizable_tensor output1, output2; |
| 1503 | |
| 1504 | |
| 1505 | const int stride_y = prnd.get_random_32bit_number()%5+1; |
| 1506 | const int stride_x = prnd.get_random_32bit_number()%5+1; |
| 1507 | int padding_y = prnd.get_random_32bit_number()%(filters.nr()/2+1); |
| 1508 | int padding_x = prnd.get_random_32bit_number()%(filters.nc()/2+1); |
| 1509 | if (!(filters.nr() <= data.nr() + 2*padding_y)) |
| 1510 | padding_y = (filters.nr()-data.nr()+1)/2; |
| 1511 | if (!(filters.nc() <= data.nc() + 2*padding_x)) |
| 1512 | padding_x = (filters.nc()-data.nc()+1)/2; |
| 1513 | conv1.setup(data,filters,stride_y,stride_x,padding_y,padding_x); |
| 1514 | conv1(false, output1, data, filters); |
| 1515 | conv2.setup(data,filters,stride_y,stride_x,padding_y,padding_x); |
| 1516 | conv2(false, output2, data, filters); |
| 1517 | dlog << LINFO << "forward error: "<< max(abs(mat(output1)-mat(output2))); |
| 1518 | double eps = 1e-3 * max(abs(mat(output1))); |
| 1519 | DLIB_TEST_MSG(max(abs(mat(output1)-mat(output2))) < eps, max(abs(mat(output1)-mat(output2))) |
| 1520 | <<"\n\t padding_y: "<< padding_y |
| 1521 | <<"\n\t padding_x: "<< padding_x |
| 1522 | <<"\n\t eps: "<< eps |
| 1523 | ); |
| 1524 | |
| 1525 | conv1(true, output1, data, filters); |
| 1526 | conv2(true, output2, data, filters); |
| 1527 | dlog << LINFO << "forward error: "<< max(abs(mat(output1)-mat(output2))); |
| 1528 | eps = 1e-3 * max(abs(mat(output1))); |
| 1529 | DLIB_TEST_MSG(max(abs(mat(output1)-mat(output2))) < eps, max(abs(mat(output1)-mat(output2))) |
| 1530 | <<"\n\t padding_y: "<< padding_y |
| 1531 | <<"\n\t padding_x: "<< padding_x |
| 1532 | <<"\n\t eps: "<< eps |
no test coverage detected