mirror of
https://github.com/webclinic017/drift.git
synced 2026-08-26 01:08:04 +00:00
feat(WalkForward): added regression/classification switch, archived old experiments, wrapped the process into run_whole_pipeline() (#10)
* refactor(WalkForward): cleaned up training & evaluation code * refactor: added run_whole_pipeline(), moved all previous models to archive
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
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
|
||||
@@ -0,0 +1,41 @@
|
||||
from keras import layers
|
||||
import keras
|
||||
|
||||
def transformer_encoder(inputs, head_size, num_heads, ff_dim, dropout=0):
|
||||
# Normalization and Attention
|
||||
x = layers.LayerNormalization(epsilon=1e-6)(inputs)
|
||||
x = layers.MultiHeadAttention(
|
||||
key_dim=head_size, num_heads=num_heads, dropout=dropout
|
||||
)(x, x)
|
||||
x = layers.Dropout(dropout)(x)
|
||||
res = x + inputs
|
||||
|
||||
# Feed Forward Part
|
||||
x = layers.LayerNormalization(epsilon=1e-6)(res)
|
||||
x = layers.Conv1D(filters=ff_dim, kernel_size=1, activation="relu")(x)
|
||||
x = layers.Dropout(dropout)(x)
|
||||
x = layers.Conv1D(filters=inputs.shape[-1], kernel_size=1)(x)
|
||||
return x + res
|
||||
|
||||
def create_basic_transformer_model(
|
||||
input_shape,
|
||||
n_classes,
|
||||
head_size,
|
||||
num_heads,
|
||||
ff_dim,
|
||||
num_transformer_blocks,
|
||||
mlp_units,
|
||||
dropout=0,
|
||||
mlp_dropout=0,
|
||||
):
|
||||
inputs = keras.Input(shape=input_shape)
|
||||
x = inputs
|
||||
for _ in range(num_transformer_blocks):
|
||||
x = transformer_encoder(x, head_size, num_heads, ff_dim, dropout)
|
||||
|
||||
x = layers.GlobalAveragePooling1D(data_format="channels_first")(x)
|
||||
for dim in mlp_units:
|
||||
x = layers.Dense(dim, activation="relu")(x)
|
||||
x = layers.Dropout(mlp_dropout)(x)
|
||||
outputs = layers.Dense(n_classes, activation="softmax")(x)
|
||||
return keras.Model(inputs, outputs)
|
||||
Reference in New Issue
Block a user