mirror of
https://github.com/webclinic017/drift.git
synced 2026-07-28 03:08:01 +00:00
7aedb91069
* feat(Eval): added format_data_for_backtest() * feat(Data): added many configurable parameters to load_files to reduce boilerplate and prepare for HPO * feat(Core): added walk forward method of training/testing * fix(Model): remove the unnecessary softmax activation from the keras models * feat(Core): added walk_forward_train_test()
102 lines
4.3 KiB
Python
102 lines
4.3 KiB
Python
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 = 'linear'))
|
|
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="linear"))
|
|
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='linear')(gap_layer)
|
|
model = keras.models.Model(inputs=input_layer, outputs=output_layer)
|
|
|
|
|
|
return model |