mirror of
https://github.com/webclinic017/drift.git
synced 2026-07-27 18:57:55 +00:00
d047b7417e
* refactor(WalkForward): cleaned up training & evaluation code * refactor: added run_whole_pipeline(), moved all previous models to archive
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
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) |