#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum GradientStdError {
Empty,
InvalidThreshold,
}
impl From<native_neural_network::gradients::GradientError> for GradientStdError {
fn from(e: native_neural_network::gradients::GradientError) -> Self {
match e {
native_neural_network::gradients::GradientError::Empty => GradientStdError::Empty,
native_neural_network::gradients::GradientError::InvalidThreshold => {
GradientStdError::InvalidThreshold
}
}
}
}
pub fn l2_norm(values: &[f32]) -> Result<f32, GradientStdError> {
native_neural_network::gradients::l2_norm_f32(values).map_err(|e| e.into())
}
pub fn clip_by_global_norm(values: &mut [f32], max_norm: f32) -> Result<f32, GradientStdError> {
native_neural_network::gradients::clip_by_global_norm_f32(values, max_norm)
.map_err(|e| e.into())
}
pub fn all_finite(values: &[f32]) -> bool {
native_neural_network::gradients::all_finite_f32(values)
}
pub fn has_nan(values: &[f32]) -> bool {
native_neural_network::gradients::has_nan_f32(values)
}
pub fn has_inf(values: &[f32]) -> bool {
native_neural_network::gradients::has_inf_f32(values)
}
pub fn within_abs_bound(values: &[f32], bound: f32) -> bool {
native_neural_network::gradients::within_abs_bound_f32(values, bound)
}