Commit ad40ddd3 authored by Davis King's avatar Davis King

Made test_layer() a little more robust.

parent cbce85ec
...@@ -1896,6 +1896,8 @@ namespace dlib ...@@ -1896,6 +1896,8 @@ namespace dlib
using namespace timpl; using namespace timpl;
// Do some setup // Do some setup
dlib::rand rnd; dlib::rand rnd;
for (int iter = 0; iter < 5; ++iter)
{
test_layer_subnet subnetwork(rnd); test_layer_subnet subnetwork(rnd);
resizable_tensor output, out2, out3; resizable_tensor output, out2, out3;
// Run setup() and forward() as well to make sure any calls to subnet() have // Run setup() and forward() as well to make sure any calls to subnet() have
...@@ -2017,7 +2019,8 @@ namespace dlib ...@@ -2017,7 +2019,8 @@ namespace dlib
double reference_derivative = (dot(out2,input_grad)-dot(out3, input_grad))/(2*eps); double reference_derivative = (dot(out2,input_grad)-dot(out3, input_grad))/(2*eps);
double output_derivative = params_grad.host()[i]; double output_derivative = params_grad.host()[i];
double relative_error = (reference_derivative - output_derivative)/(reference_derivative + 1e-100); double relative_error = (reference_derivative - output_derivative)/(reference_derivative + 1e-100);
if (std::abs(relative_error) > 0.01) double absolute_error = (reference_derivative - output_derivative);
if (std::abs(relative_error) > 0.02 && std::abs(absolute_error) > 0.001)
{ {
using namespace std; using namespace std;
sout << "Gradient error in parameter #" << i <<". Relative error: "<< relative_error << endl; sout << "Gradient error in parameter #" << i <<". Relative error: "<< relative_error << endl;
...@@ -2049,7 +2052,8 @@ namespace dlib ...@@ -2049,7 +2052,8 @@ namespace dlib
if (!impl::is_inplace_layer(l,subnetwork)) if (!impl::is_inplace_layer(l,subnetwork))
output_derivative -= initial_gradient_input[i]; output_derivative -= initial_gradient_input[i];
double relative_error = (reference_derivative - output_derivative)/(reference_derivative + 1e-100); double relative_error = (reference_derivative - output_derivative)/(reference_derivative + 1e-100);
if (std::abs(relative_error) > 0.01) double absolute_error = (reference_derivative - output_derivative);
if (std::abs(relative_error) > 0.02 && std::abs(absolute_error) > 0.001)
{ {
using namespace std; using namespace std;
sout << "Gradient error in data variable #" << i <<". Relative error: "<< relative_error << endl; sout << "Gradient error in data variable #" << i <<". Relative error: "<< relative_error << endl;
...@@ -2059,6 +2063,8 @@ namespace dlib ...@@ -2059,6 +2063,8 @@ namespace dlib
} }
} }
} // end for (int iter = 0; iter < 5; ++iter)
return layer_test_results(); return layer_test_results();
} }
......
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