void noise_data_transformer::transform( const void * input_data, void * output_data, neuron_data_type::input_type type, const layer_configuration_specific& original_config) { if (type != neuron_data_type::type_byte) throw neural_network_exception("noise_data_transformer is implemented for data stored as bytes only"); unsigned char * data = static_cast<unsigned char *>(output_data); unsigned int elem_count = original_config.get_neuron_count(); for(unsigned char * data_it = data; data_it != (data + elem_count); data_it++) { int shift = max_noise_distribution(generator); *data_it = static_cast<unsigned char>(std::min<int>(std::max<int>((shift + static_cast<int>(*data_it)), 0), 255)); } }
void noise_data_transformer::transform( const float * data, float * data_transformed, const layer_configuration_specific& original_config, unsigned int sample_id) { unsigned int elem_count = original_config.get_neuron_count(); { std::lock_guard<std::mutex> lock(gen_stream_mutex); for(unsigned int elem_id = 0; elem_id < elem_count; ++elem_id) { float shift = max_noise_distribution.min(); if (max_noise_distribution.max() > max_noise_distribution.min()) shift = max_noise_distribution(generator); data_transformed[elem_id] = data[elem_id] + shift; } } }