---
title: "BNNSOptimizerStep(_:_:_:_:_:_:_:)"
framework: accelerate
role: symbol
role_heading: Function
path: "accelerate/bnnsoptimizerstep(_:_:_:_:_:_:_:)"
---

# BNNSOptimizerStep(_:_:_:_:_:_:_:)

Applies a single optimization step to one or more parameters.

## Declaration

```swift
func BNNSOptimizerStep(_ function: BNNSOptimizerFunction, _ OptimizerAlgFields: UnsafeRawPointer, _ number_of_parameters: Int, _ parameters: UnsafeMutablePointer<UnsafeMutablePointer<BNNSNDArrayDescriptor>>, _ gradients: UnsafeMutablePointer<UnsafePointer<BNNSNDArrayDescriptor>>, _ accumulators: UnsafeMutablePointer<UnsafeMutablePointer<BNNSNDArrayDescriptor>?>?, _ filter_params: UnsafePointer<BNNSFilterParameters>?) -> Int32
```

## Parameters

- `function`: The optimization algorithm.
- `OptimizerAlgFields`: A pointer to parameters for optimization function.
- `number_of_parameters`: The number of parameters the step updates.
- `parameters`: An array of pointers to parameter descriptors.
- `gradients`: An array of pointers to gradient descriptors.
- `accumulators`: An array of pointers to accumulator descriptors.
- `filter_params`: The filter runtime parameters.

## Discussion

Discussion Use BNNSOptimizerStep(_:_:_:_:_:_:_:) to update a set of parameters using a supplied optimization algorithm. important: Parameter, gradient, and accumulator descriptors must have the same sizes and strides and be of type float. For example, the following shows the code required to update the weights data described by weightsDescriptor using an Adam optimizer. var weightsDescriptor: BNNSNDArrayDescriptor = ... var deltaDescriptor: BNNSNDArrayDescriptor = ... var accumulatorOneDescriptor: BNNSNDArrayDescriptor = ... var accumulatorTwoDescriptor: BNNSNDArrayDescriptor = ... var adamFields: BNNSOptimizerAdamFields = ...

withUnsafeMutablePointer(to: &weightsDescriptor) { weightsDescriptorPtr in     withUnsafePointer(to: &deltaDescriptor) { deltaDescriptorPtr in         withUnsafeMutablePointer(to: &accumulatorOneDescriptor) { accumulatorOneDescriptorPtr in             withUnsafeMutablePointer(to: &accumulatorTwoDescriptor) { accumulatorTwoDescriptorPtr in                                  var paramaters = [ weightsDescriptorPtr ]                 var gradients = [ deltaDescriptorPtr ]                 var accumulators = [ Optional(accumulatorOneDescriptorPtr),                                      Optional(accumulatorTwoDescriptorPtr) ]                                  let error = withUnsafePointer(to: &adamFields) { adamFieldsPointer in                     BNNSOptimizerStep(BNNSOptimizerFunctionAdam,                                       adamFieldsPointer, 1,                                       &paramaters,                                       &gradients,                                       &accumulators,                                       nil)                 }                                  if error != 0 {                     fatalError("BNNSOptimizerStep failed.")                 }             }         }     } }

## See Also

### Optimizers

- [BNNS.AdamOptimizer](accelerate/bnns/adamoptimizer.md)
- [BNNS.AdamWOptimizer](accelerate/bnns/adamwoptimizer.md)
- [BNNS.RMSPropOptimizer](accelerate/bnns/rmspropoptimizer.md)
- [BNNS.SGDMomentumOptimizer](accelerate/bnns/sgdmomentumoptimizer.md)
- [BNNSOptimizer](accelerate/bnnsoptimizer.md)
- [BNNSOptimizerRegularizationFunction](accelerate/bnnsoptimizerregularizationfunction.md)
- [BNNSOptimizerAdamFields](accelerate/bnnsoptimizeradamfields.md)
- [BNNSOptimizerAdamWithClippingFields](accelerate/bnnsoptimizeradamwithclippingfields.md)
- [BNNSOptimizerRMSPropFields](accelerate/bnnsoptimizerrmspropfields.md)
- [BNNSOptimizerRMSPropWithClippingFields](accelerate/bnnsoptimizerrmspropwithclippingfields.md)
- [BNNSOptimizerSGDMomentumFields](accelerate/bnnsoptimizersgdmomentumfields.md)
- [BNNSOptimizerSGDMomentumWithClippingFields](accelerate/bnnsoptimizersgdmomentumwithclippingfields.md)
- [BNNSOptimizerSGDMomentumVariant](accelerate/bnnsoptimizersgdmomentumvariant.md)
- [BNNSOptimizerFunction](accelerate/bnnsoptimizerfunction.md)
