"torchvision/git@developer.sourcefind.cn:OpenDAS/vision.git" did not exist on "23295fbb3211987a4eb84198993cba87e3468622"
Commit d479bf85 authored by Davis King's avatar Davis King
Browse files

Added tests to make sure the GPU and CPU conv code does the same thing.

parent fe6e2457
...@@ -494,6 +494,80 @@ namespace ...@@ -494,6 +494,80 @@ namespace
#ifdef DLIB_USE_CUDA #ifdef DLIB_USE_CUDA
void test_conv()
{
cuda::tensor_conv conv1;
cpu::tensor_conv conv2;
dlib::rand prnd;
for (int iter = 0; iter < 400; ++iter)
{
print_spinner();
resizable_tensor data(prnd.get_random_32bit_number()%5+1,
prnd.get_random_32bit_number()%5+1,
prnd.get_random_32bit_number()%30+1,
prnd.get_random_32bit_number()%30+1
);
resizable_tensor filters(
prnd.get_random_32bit_number()%5+1,
data.k(),
prnd.get_random_32bit_number()%6+1,
prnd.get_random_32bit_number()%6+1
);
tt::tensor_rand rnd;
rnd.fill_uniform(data);
rnd.fill_uniform(filters);
resizable_tensor output1, output2;
const int stride_y = prnd.get_random_32bit_number()%5+1;
const int stride_x = prnd.get_random_32bit_number()%5+1;
conv1(output1, data, filters, stride_y,stride_x);
conv2(output2, data, filters, stride_y,stride_x);
dlog << LINFO << "forward error: "<< max(abs(mat(output1)-mat(output2)));
DLIB_TEST(max(abs(mat(output1)-mat(output2))) < 1e-3);
resizable_tensor gi, data_gradient1, data_gradient2;
gi.copy_size(output1);
rnd.fill_uniform(gi);
data_gradient1.copy_size(data);
data_gradient2.copy_size(data);
data_gradient1 = 1;
data_gradient2 = 1;
conv1.get_gradient_for_data(gi, filters, data_gradient1);
conv2.get_gradient_for_data(gi, filters, data_gradient2);
dlog << LINFO << "data gradient error: "<< max(abs(mat(data_gradient1)-mat(data_gradient2)));
DLIB_TEST(max(abs(mat(data_gradient1)-mat(data_gradient2))) < 1e-3);
resizable_tensor filter_gradient1, filter_gradient2;
gi.copy_size(output1);
rnd.fill_uniform(gi);
filter_gradient1.copy_size(filters);
filter_gradient2.copy_size(filters);
filter_gradient1 = 1;
filter_gradient2 = 1;
conv1.get_gradient_for_filters(gi, data, filter_gradient1);
conv2.get_gradient_for_filters(gi, data, filter_gradient2);
dlog << LINFO << "filter gradient error: "<< max(abs(mat(filter_gradient1)-mat(filter_gradient2)));
DLIB_TEST(max(abs(mat(filter_gradient1)-mat(filter_gradient2))) < 1e-3);
}
}
void test_add() void test_add()
{ {
print_spinner(); print_spinner();
...@@ -1105,6 +1179,7 @@ namespace ...@@ -1105,6 +1179,7 @@ namespace
{ {
test_tagging(); test_tagging();
#ifdef DLIB_USE_CUDA #ifdef DLIB_USE_CUDA
test_conv();
test_more_ops2(); test_more_ops2();
test_more_ops(1,1); test_more_ops(1,1);
test_more_ops(3,4); test_more_ops(3,4);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment