int ErrorData::readH5(hid_t group_id) { // Read all the data hid_t dataset_id; vector<unsigned int> region_origin(2,0); dataset_id = H5Dopen2(group_id,"region_origin",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, ®ion_origin[0]); H5Dclose(dataset_id); vector<unsigned int> region_dim(2,0); dataset_id = H5Dopen2(group_id,"region_dim",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, ®ion_dim[0]); H5Dclose(dataset_id); vector<unsigned int> error_data_dim(2,0); dataset_id = H5Dopen2(group_id,"error_data_dim",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &error_data_dim[0]); H5Dclose(dataset_id); if(error_data_dim[0] != ERROR_DATA_N_ROWS) return(EXIT_FAILURE); vector<uint64_t> error_data(error_data_dim[0]*error_data_dim[1],0); dataset_id = H5Dopen2(group_id,"error_data",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT_LEAST64, H5S_ALL, H5S_ALL, H5P_DEFAULT, &error_data[0]); H5Dclose(dataset_id); // Store data in object Initialize(region_origin,region_dim,error_data_dim,error_data); return(EXIT_SUCCESS); }
Vector< Matrix<double> > TestingAnalysis::calculate_error_data(void) const { // Data set stuff #ifndef NDEBUG check(); #endif const unsigned testing_instances_number = data_set_pointer->get_instances().count_testing_instances_number(); #ifndef NDEBUG std::ostringstream buffer; if(testing_instances_number == 0) { buffer << "OpenNN Exception: TestingAnalysis class.\n" << "Vector< Matrix<double> > calculate_error_data(void) const.\n" << "Number of testing instances is zero.\n"; throw std::logic_error(buffer.str()); } #endif const Matrix<double> input_data = data_set_pointer->arrange_testing_input_data(); const Matrix<double> target_data = data_set_pointer->arrange_testing_target_data(); // Neural network stuff const Matrix<double> output_data = neural_network_pointer->calculate_output_data(input_data); const UnscalingLayer* unscaling_layer_pointer = neural_network_pointer->get_unscaling_layer_pointer(); #ifndef NDEBUG if(!unscaling_layer_pointer) { buffer << "OpenNN Exception: TestingAnalysis class.\n" << "Vector< Matrix<double> > calculate_error_data(void) const.\n" << "Unscaling layer is NULL.\n"; throw std::logic_error(buffer.str()); } #endif const Vector<double>& outputs_minimum = unscaling_layer_pointer->arrange_minimums(); const Vector<double>& outputs_maximum = unscaling_layer_pointer->arrange_maximums(); const unsigned outputs_number = unscaling_layer_pointer->get_unscaling_neurons_number(); // Error data Vector< Matrix<double> > error_data(outputs_number); Vector<double> targets(testing_instances_number); Vector<double> outputs(testing_instances_number); for(unsigned i = 0; i < outputs_number; i++) { error_data[i].set(testing_instances_number, 3, 0.0); // Absolute error targets = target_data.arrange_column(i); outputs = output_data.arrange_column(i); error_data[i].set_column(0, (targets - outputs).calculate_absolute_value()); // Relative error error_data[i].set_column(1, (targets - outputs).calculate_absolute_value()/(outputs_maximum[i]-outputs_minimum[i])); // Percentage error error_data[i].set_column(2, (targets - outputs).calculate_absolute_value()*100.0/(outputs_maximum[i]-outputs_minimum[i])); } return(error_data); }