# tf.keras.layers.DepthwiseConv2D

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/keras-team/keras/tree/v2.14.0/keras/layers/convolutional/depthwise_conv2d.py#L27-L209) |

Depthwise 2D convolution.

Inherits From: [`Layer`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/layers/Layer), [`Module`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/Module)

    tf.keras.layers.DepthwiseConv2D(
        kernel_size,
        strides=(1, 1),
        padding='valid',
        depth_multiplier=1,
        data_format=None,
        dilation_rate=(1, 1),
        activation=None,
        use_bias=True,
        depthwise_initializer='glorot_uniform',
        bias_initializer='zeros',
        depthwise_regularizer=None,
        bias_regularizer=None,
        activity_regularizer=None,
        depthwise_constraint=None,
        bias_constraint=None,
        **kwargs
    )

Depthwise convolution is a type of convolution in which each input channel
is convolved with a different kernel (called a depthwise kernel). You can
understand depthwise convolution as the first step in a depthwise separable
convolution.

It is implemented via the following steps:

- Split the input into individual channels.
- Convolve each channel with an individual depthwise kernel with `depth_multiplier` output channels.
- Concatenate the convolved outputs along the channels axis.

Unlike a regular 2D convolution, depthwise convolution does not mix
information across different input channels.

The `depth_multiplier` argument determines how many filter are applied to
one input channel. As such, it controls the amount of output channels that
are generated per input channel in the depthwise step.

<br />

<br />

<br />

| ## Args ||
|---|---|
| `kernel_size` | An integer or tuple/list of 2 integers, specifying the height and width of the 2D convolution window. Can be a single integer to specify the same value for all spatial dimensions. |
| `strides` | An integer or tuple/list of 2 integers, specifying the strides of the convolution along the height and width. Can be a single integer to specify the same value for all spatial dimensions. Current implementation only supports equal length strides in row and column dimensions. Specifying any stride value != 1 is incompatible with specifying any `dilation_rate` value !=1. |
| `padding` | one of `'valid'` or `'same'` (case-insensitive). `"valid"` means no padding. `"same"` results in padding with zeros evenly to the left/right or up/down of the input such that output has the same height/width dimension as the input. |
| `depth_multiplier` | The number of depthwise convolution output channels for each input channel. The total number of depthwise convolution output channels will be equal to `filters_in * depth_multiplier`. |
| `data_format` | A string, one of `channels_last` (default) or `channels_first`. The ordering of the dimensions in the inputs. `channels_last` corresponds to inputs with shape `(batch_size, height, width, channels)` while `channels_first` corresponds to inputs with shape `(batch_size, channels, height, width)`. When unspecified, uses `image_data_format` value found in your Keras config file at `~/.keras/keras.json` (if exists) else 'channels_last'. Defaults to 'channels_last'. |
| `dilation_rate` | An integer or tuple/list of 2 integers, specifying the dilation rate to use for dilated convolution. Currently, specifying any `dilation_rate` value != 1 is incompatible with specifying any `strides` value != 1. |
| `activation` | Activation function to use. If you don't specify anything, no activation is applied (see [`keras.activations`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/activations)). |
| `use_bias` | Boolean, whether the layer uses a bias vector. |
| `depthwise_initializer` | Initializer for the depthwise kernel matrix (see [`keras.initializers`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/initializers)). If None, the default initializer ('glorot_uniform') will be used. |
| `bias_initializer` | Initializer for the bias vector (see [`keras.initializers`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/initializers)). If None, the default initializer ('zeros') will be used. |
| `depthwise_regularizer` | Regularizer function applied to the depthwise kernel matrix (see [`keras.regularizers`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/regularizers)). |
| `bias_regularizer` | Regularizer function applied to the bias vector (see [`keras.regularizers`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/regularizers)). |
| `activity_regularizer` | Regularizer function applied to the output of the layer (its 'activation') (see [`keras.regularizers`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/regularizers)). |
| `depthwise_constraint` | Constraint function applied to the depthwise kernel matrix (see [`keras.constraints`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/constraints)). |
| `bias_constraint` | Constraint function applied to the bias vector (see [`keras.constraints`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/constraints)). |

<br />

<br />

<br />

<br />

| ## Input shape ||
|---|---|
| 4D tensor with shape: `[batch_size, channels, rows, cols]` if data_format='channels_first' or 4D tensor with shape: `[batch_size, rows, cols, channels]` if data_format='channels_last'. ||

<br />

<br />

<br />

<br />

| ## Output shape ||
|---|---|
| 4D tensor with shape: `[batch_size, channels * depth_multiplier, new_rows, new_cols]` if `data_format='channels_first'` or 4D tensor with shape: `[batch_size, new_rows, new_cols, channels * depth_multiplier]` if `data_format='channels_last'`. `rows` and `cols` values might have changed due to padding. ||

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| A tensor of rank 4 representing `activation(depthwiseconv2d(inputs, kernel) + bias)`. ||

<br />

<br />

<br />

<br />

| ## Raises ||
|---|---|
| `ValueError` | if `padding` is "causal". |
| `ValueError` | when both `strides` \> 1 and `dilation_rate` \> 1. |

<br />

## Methods

### `convolution_op`

[View source](https://github.com/keras-team/keras/tree/v2.14.0/keras/layers/convolutional/base_conv.py#L254-L270)

    convolution_op(
        inputs, kernel
    )