## Supported Keras Operators 

The Keras frontend supports `Sequential()` Keras models.
The list of supported operations is as follows:

* `Conv2D`
* `DepthwiseConv2D`
* `Dense`
* `BatchNormalization`
* `MaxPooling2D`
* `AveragePooling2D`
* `Flatten`
* `Add`
* `ZeroPadding2D`
* `Activation` 
   * `relu`
   * `tanh`
   * `softmax`



## Limitations 

* Currently, we support Convolutional Neural Networks (CNNs) that include the supported operators (above) - RNNs/LSTMs not supported
* We currently only support models in NCHW format (NHWC is not supported)
* Softmax operator should be the last operation in the CNN pipeline 
* Softmax operation must be a separate operator (not specified as activation to another type of Keras operator). Example of what works:

```python
Activation ("softmax")
```

Example of what is NOT supported:

```python
Dense(num_classes, activation="softmax")
```

* For convolutions with stride > 1 `same` convolution is NOT supported. Explicitly add `ZeroPadding2D` layer before `Conv2D` or `DepthwiseConv2D` operators. Example of what does NOT work:

```python
Conv2D(num_filters, (3,3), strides = (2,2), padding = `same`)
```

Example of what works instead:

```python
ZeroPadding2D(padding=(1,1), data_format = `channels_first`) # only support NCHW
Conv2D(num_filters, (3,3), strides = (2,2), padding = `valid`)
```