<!--
{
  "availability" : [
    "iOS: 10.0.0 - 11.0.0",
    "iPadOS: 10.0.0 - 11.0.0",
    "tvOS: 10.0.0 - 11.0.0",
    "visionOS: 1.0.0 - 1.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "MetalPerformanceShaders",
  "identifier" : "/documentation/MetalPerformanceShaders/MPSCNNFullyConnected/init(device:convolutionDescriptor:kernelWeights:biasTerms:flags:)",
  "metadataVersion" : "0.1.0",
  "role" : "Initializer",
  "symbol" : {
    "kind" : "Initializer",
    "modules" : [
      "Metal Performance Shaders"
    ],
    "preciseIdentifier" : "c:objc(cs)MPSCNNFullyConnected(im)initWithDevice:convolutionDescriptor:kernelWeights:biasTerms:flags:"
  },
  "title" : "init(device:convolutionDescriptor:kernelWeights:biasTerms:flags:)"
}
-->

# init(device:convolutionDescriptor:kernelWeights:biasTerms:flags:)

Initializes a fully connected convolution layer.

```
init(device: any MTLDevice, convolutionDescriptor: MPSCNNConvolutionDescriptor, kernelWeights: UnsafePointer<Float>, biasTerms: UnsafePointer<Float>?, flags: MPSCNNConvolutionFlags)
```

## Parameters

`device`

The device on which this kernel will run.

`convolutionDescriptor`

A valid convolution descriptor.

    The values of the    ````MPSCNNConvolutionDescriptor/strideInPixelsX``, ``MPSCNNConvolutionDescriptor/strideInPixelsY``, and ``MPSCNNConvolutionDescriptor/groups`` properties of the descriptor must be set to`    1` (i.e. their default values).

`kernelWeights`

A pointer to a weights array.

    Each entry is a float value. The number of entries is equal to [`inputFeatureChannels`](/documentation/MetalPerformanceShaders/MPSCNNConvolutionDescriptor/inputFeatureChannels)         `*`     [`outputFeatureChannels`](/documentation/MetalPerformanceShaders/MPSCNNConvolutionDescriptor/outputFeatureChannels)         `*`     [`kernelHeight`](/documentation/MetalPerformanceShaders/MPSCNNConvolutionDescriptor/kernelHeight)         `*`     [`kernelWidth`](/documentation/MetalPerformanceShaders/MPSCNNConvolutionDescriptor/kernelWidth)    .

    The layout of the filter weights is arranged so that it can be reinterpreted as a 4D tensor (array)     `weight[outputFeatureChannels][kernelHeight][kernelWidth][inputChannels/groups].`

    Weights are converted to half float precision (    `fp16`    ) internally for best performance.

`biasTerms`

A pointer to bias terms to be applied to the convolution output.

    Each entry is a float value. The number of entries is the number of output feature maps.

`flags`

Currently unused.

    This value must be [`MPSCNNConvolutionFlags.none`](/documentation/MetalPerformanceShaders/MPSCNNConvolutionFlags/none)    .

## Return Value

A valid [`MPSCNNFullyConnected`](/documentation/MetalPerformanceShaders/MPSCNNFullyConnected) object or `nil`, if failure.

## Discussion

> Note:
> The encode methods in the ``doc://com.apple.metalperformanceshaders/documentation/MetalPerformanceShaders/MPSCNNKernel`` class can be used to encode an ``doc://com.apple.metalperformanceshaders/documentation/MetalPerformanceShaders/MPSCNNFullyConnected`` object to a <doc://com.apple.documentation/documentation/Metal/MTLCommandBuffer> object.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)