Complex-valued convolutions could provide some interesting results in signal processing-based deep learning. A simple(-ish) idea is including explicit phase information of time series in neural networks. This code enables complex-valued convolution in convolutional neural networks in keras with the TensorFlow backend. This makes the network modular and interoperable with standard keras layers and operations.
This code is very much in Alpha. Please consider helping out improving the code to advance together. This repository is based on the code which reproduces experiments presented in the paper Deep Complex Networks. It is a port to Keras with Tensorflow-backend.
- numpy
- scipy
- scikit-learn
- tensorflow 2.X
Install requirements for computer vision experiments with pip:
pip install -r requirements.txt
Depending on your Python installation you might want to use anaconda or venv or other tools.
pip install keras-complex
Build your neural networks with the help of keras.
import complexnn
import keras
from keras import models
from keras import layers
from keras import optimizers
model = models.Sequential()
model.add(complexnn.conv.ComplexConv2D(32, (3, 3), activation='relu', padding='same', input_shape=(28, 28, 2)))
model.add(complexnn.bn.ComplexBatchNormalization())
model.add(layers.MaxPooling2D((2, 2), padding='same'))
model.compile(optimizer=optimizers.Adam(), loss='mse')
An example working implementation of an autoencoder can be found here.
This library assumes that complex values are split into two real-valued parts. The real-valued and complex-valued complement, also seen in the Docs.
The tensors for a 2D complex tensor of 3x3, the look like:
[[[r r r],
[r r r],
[r r r]],
[i,i,i],
[i,i,i],
[i,i,i]]]
So multiple samples should then be arranged into [r,r,r,i,i,i]
, which is also documented in the Docs.
Find the CITATION file or cite this software version as:
@misc{dramsch2019complex,
title = {Complex-Valued Neural Networks in Keras with Tensorflow},
url = {https://figshare.com/articles/Complex-Valued_Neural_Networks_in_Keras_with_Tensorflow/9783773/1},
DOI = {10.6084/m9.figshare.9783773},
publisher = {figshare},
author = {Dramsch, Jesper S{\"o}ren and Contributors},
year = {2019}
}
Please cite the original work as:
@ARTICLE {Trabelsi2017,
author = "Chiheb Trabelsi, Olexa Bilaniuk, Ying Zhang, Dmitriy Serdyuk, Sandeep Subramanian, João Felipe Santos, Soroush Mehri, Negar Rostamzadeh, Yoshua Bengio, Christopher J Pal",
title = "Deep Complex Networks",
journal = "arXiv preprint arXiv:1705.09792",
year = "2017"
}