Source code for cardio.models.fft_model.fft_model
""" Contains fft_model architecture """
from keras.layers import Input, Conv1D, Lambda, \
MaxPooling1D, MaxPooling2D, \
Dense, GlobalMaxPooling2D
from keras.layers.core import Dropout
import keras.backend as K
import tensorflow as tf
from ...dataset.dataset.models.keras import KerasModel
from ..keras_custom_objects import RFFT, Crop, Inception2D
[docs]class FFTModel(KerasModel):#pylint: disable=too-many-locals
'''
FFT inception model. Includes initial convolution layers, then FFT transform, then
a series of inception blocks.
'''
def _build(self, **kwargs):#pylint: disable=too-many-locals
'''
Build model
'''
with tf.variable_scope('fft_model'):#pylint: disable=not-context-manager
x = Input(kwargs['input_shape'])
conv_1 = Conv1D(4, 4, activation='relu')(x)
mp_1 = MaxPooling1D()(conv_1)
conv_2 = Conv1D(8, 4, activation='relu')(mp_1)
mp_2 = MaxPooling1D()(conv_2)
conv_3 = Conv1D(16, 4, activation='relu')(mp_2)
mp_3 = MaxPooling1D()(conv_3)
conv_4 = Conv1D(32, 4, activation='relu')(mp_3)
fft_1 = RFFT()(conv_4)
crop_1 = Crop(begin=0, size=128)(fft_1)
to2d = Lambda(K.expand_dims)(crop_1)
incept_1 = Inception2D(4, 4, 3, 3, activation='relu')(to2d)
mp2d_1 = MaxPooling2D(pool_size=(4, 2))(incept_1)
incept_2 = Inception2D(4, 8, 3, 3, activation='relu')(mp2d_1)
mp2d_2 = MaxPooling2D(pool_size=(4, 2))(incept_2)
incept_3 = Inception2D(4, 12, 3, 3, activation='relu')(mp2d_2)
pool = GlobalMaxPooling2D()(incept_3)
fc_1 = Dense(8, kernel_initializer='uniform', activation='relu')(pool)
drop = Dropout(0.2)(fc_1)
fc_2 = Dense(2, kernel_initializer='uniform',
activation='softmax')(drop)
return x, fc_2