import keras def create_basic_lstm_model(input_shape, num_classes): model = keras.Sequential() model.add(keras.layers.LSTM(units = 10, return_sequences = True, activation = 'sigmoid', input_shape=input_shape)) model.add(keras.layers.Flatten()) model.add(keras.layers.Dropout(0.3)) model.add(keras.layers.Dense(units = 64, activation = 'sigmoid')) model.add(keras.layers.Dropout(0.3)) model.add(keras.layers.Dense(units = 32, activation = 'sigmoid')) model.add(keras.layers.Dropout(0.3)) model.add(keras.layers.Dense(units = num_classes, activation = 'softmax')) return model def create_basic_cnn_model(input_shape, num_classes): model = keras.Sequential() model.add(keras.layers.Conv1D(filters=32, kernel_size=3, padding="same", input_shape=input_shape)) model.add(keras.layers.BatchNormalization()) model.add(keras.layers.ReLU()) model.add(keras.layers.Conv1D(filters=32, kernel_size=3, padding="same")) model.add(keras.layers.BatchNormalization()) model.add(keras.layers.ReLU()) model.add(keras.layers.Conv1D(filters=32, kernel_size=3, padding="same")) model.add(keras.layers.BatchNormalization()) model.add(keras.layers.ReLU()) model.add(keras.layers.GlobalAveragePooling1D()) model.add(keras.layers.Dense(num_classes, activation="softmax")) return model def create_resnet_cnn_model(input_shape, num_classes): n_feature_maps = 24 input_layer = keras.layers.Input(input_shape) conv_x = keras.layers.Conv1D(filters=n_feature_maps, kernel_size=8, padding='same')(input_layer) conv_x = keras.layers.BatchNormalization()(conv_x) conv_x = keras.layers.Activation('relu')(conv_x) conv_y = keras.layers.Conv1D(filters=n_feature_maps, kernel_size=5, padding='same')(conv_x) conv_y = keras.layers.BatchNormalization()(conv_y) conv_y = keras.layers.Activation('relu')(conv_y) conv_z = keras.layers.Conv1D(filters=n_feature_maps, kernel_size=3, padding='same')(conv_y) conv_z = keras.layers.BatchNormalization()(conv_z) # expand channels for the sum shortcut_y = keras.layers.Conv1D(filters=n_feature_maps, kernel_size=1, padding='same')(input_layer) shortcut_y = keras.layers.BatchNormalization()(shortcut_y) output_block_1 = keras.layers.add([shortcut_y, conv_z]) output_block_1 = keras.layers.Activation('relu')(output_block_1) # BLOCK 2 conv_x = keras.layers.Conv1D(filters=n_feature_maps * 2, kernel_size=8, padding='same')(output_block_1) conv_x = keras.layers.BatchNormalization()(conv_x) conv_x = keras.layers.Activation('relu')(conv_x) conv_y = keras.layers.Conv1D(filters=n_feature_maps * 2, kernel_size=5, padding='same')(conv_x) conv_y = keras.layers.BatchNormalization()(conv_y) conv_y = keras.layers.Activation('relu')(conv_y) conv_z = keras.layers.Conv1D(filters=n_feature_maps * 2, kernel_size=3, padding='same')(conv_y) conv_z = keras.layers.BatchNormalization()(conv_z) # expand channels for the sum shortcut_y = keras.layers.Conv1D(filters=n_feature_maps * 2, kernel_size=1, padding='same')(output_block_1) shortcut_y = keras.layers.BatchNormalization()(shortcut_y) output_block_2 = keras.layers.add([shortcut_y, conv_z]) output_block_2 = keras.layers.Activation('relu')(output_block_2) # BLOCK 3 conv_x = keras.layers.Conv1D(filters=n_feature_maps * 2, kernel_size=8, padding='same')(output_block_2) conv_x = keras.layers.BatchNormalization()(conv_x) conv_x = keras.layers.Activation('relu')(conv_x) conv_y = keras.layers.Conv1D(filters=n_feature_maps * 2, kernel_size=5, padding='same')(conv_x) conv_y = keras.layers.BatchNormalization()(conv_y) conv_y = keras.layers.Activation('relu')(conv_y) conv_z = keras.layers.Conv1D(filters=n_feature_maps * 2, kernel_size=3, padding='same')(conv_y) conv_z = keras.layers.BatchNormalization()(conv_z) # no need to expand channels because they are equal shortcut_y = keras.layers.BatchNormalization()(output_block_2) output_block_3 = keras.layers.add([shortcut_y, conv_z]) output_block_3 = keras.layers.Activation('relu')(output_block_3) # FINAL gap_layer = keras.layers.GlobalAveragePooling1D()(output_block_3) output_layer = keras.layers.Dense(num_classes, activation='softmax')(gap_layer) model = keras.models.Model(inputs=input_layer, outputs=output_layer) return model