Support code for Mads Olsen’s group’s model


source

load_saved_keras

 load_saved_keras ()

source

cal_psd

 cal_psd (x, fs, window, noverlap, nfft, f_min, f_max, f_sub=1)

https://github.com/MADSOLSEN/SleepStagePrediction/blob/d47ff488f5cedd3b0459593a53fc4f92fc3660a2/signal_processing/spectrogram.py#L91


source

iqr_normalization_adaptive

 iqr_normalization_adaptive (x, fs, median_window, iqr_window)

source

clip_by_iqr

 clip_by_iqr (x, fs, threshold=20)

source

median

 median (x, fs, window_size)

source

determine_depth

 determine_depth (temporal_shape, temporal_max_pool_size)

source

conv_block

 conv_block (x, features, kernel_size, data_format='channels_last',
             weight_decay=0.0, residual=True, stochastic_depth=True,
             activation='gelu')

source

factory_ResUNet

 factory_ResUNet (input_shape, num_classes, num_outputs, depth=None,
                  init_filter_num=8,
                  filter_increment_factor=1.2599210498948732,
                  kernel_size=(16, 1), max_pool_size=(2, 1),
                  activation='gelu', output_layer='sigmoid',
                  weight_decay=0.0, residual=False,
                  stochastic_depth=False, data_format='channels_last')
events = ['wake', 'light', 'deep', 'rem']
events_format = [
    {
        'name': 'wake', 
        'h5_path': 'wake',
        'probability': 1 / len(events)
    },
    {
        'name': 'light', 
        'h5_path': 'light',
        'probability': 1 / len(events)
    },
    {
        'name': 'deep', 
        'h5_path': 'deep',
        'probability': 1 / len(events)
    },
    {
        'name': 'rem', 
        'h5_path': 'rem',
        'probability': 1 / len(events)
    }
]
signals_format =  {
    "ACC_merge_fft_spec": {
        "add": True,
        "fs_post": 0.5,
        "h5_path": "acc_signal",
        "dimensions": [
            32,
            1
        ],
        "channel_idx": [
            0,
            1,
            2
        ],
        "preprocessing": [
            {
                "args": {
                    "window_size": 30
                },
                "type": "median"
            },
            {
                "args": {
                    "iqr_window": 300,
                    "median_window": 300
                },
                "type": "iqr_normalization_adaptive"
            },
            {
                "args": {
                    "threshold": 20
                },
                "type": "clip_by_iqr"
            },
            {
                "args": {
                    "nfft": 512,
                    "f_max": 6,
                    "f_min": 0,
                    "f_sub": 3,
                    "window": 320,
                    "noverlap": 256
                },
                "type": "cal_psd"
            }
        ],
        "transformations": {
            "freq_mask": {},
            "time_mask": {},
            "image_translation": {}
        },
        "batch_normalization": {}
    },
    "PPG_fft_spec": {
        "add": False,
        "fs_post": 0.5,
        "h5_path": "ppg_signal",
        "dimensions": [
            32,
            1
        ],
        "channel_idx": [
            0
        ],
        "preprocessing": [
            {
                "args": {},
                "type": "zscore"
            },
            {
                "args": {},
                "type": "change_PPG_direction"
            },
            {
                "args": {
                    "iqr_window": 301,
                    "median_window": 301
                },
                "type": "iqr_normalization_adaptive"
            },
            {
                "args": {
                    "threshold": 20
                },
                "type": "clip_by_iqr"
            },
            {
                "args": {
                    "nfft": 512,
                    "f_max": 2.1,
                    "f_min": 0.1,
                    "f_sub": 1,
                    "window": 320,
                    "noverlap": 256
                },
                "type": "cal_psd"
            }
        ],
        "transformations": {
            "freq_mask": {},
            "time_mask": {},
            "image_translation": {}
        },
        "batch_normalization": {}
    }
}
data_directory = '.'

dataset_params = {
    "h5_directory": data_directory, 
    "signals_format": signals_format,
    "window": 30 * 2 ** 10, 
    "number_of_channels": len(signals_format), 
    "events_format": events_format,
    "prediction_resolution": 30,
    "overlap": 0.25,
    "minimum_overlap": 0.1,
    "batch_size": 2,
    "cache_data": True,
    "n_jobs": 4,
    "use_mask": True,
    "load_signal_in_RAM": True
}

@dataclass
class DSLite:
    fsTime: float
    nSpace: int
    nChannels: int
    window: int
    prediction_resolution: int

    def __init__(self, h5_directory, signals_format, window, overlap, batch_size, minimum_overlap, events_format, number_of_channels, prediction_resolution, load_signal_in_RAM, use_mask, cache_data, n_jobs):
# datasets
        self.h5_directory = h5_directory

        # signal modalities
        self.signals_format = signals_format
        self.window = window
        self.number_of_channels = number_of_channels
        self.prediction_resolution = prediction_resolution
        self.overlap = overlap
        self.batch_size = batch_size
        self.predictions_per_window = window // prediction_resolution
        self.nChannels = sum([sf['dimensions'][-1] for sf in signals_format.values()])
        self.nSpace = [sf['dimensions'][0] for sf in signals_format.values()][0] # assumes same space resolution
        self.fsTime = [sf['fs_post'] for sf in signals_format.values()][0] # assumes same temporal resolution

        # events
        self.events_format = events_format
        self.minimum_overlap = minimum_overlap
        self.number_of_events = len(events_format)
        self.number_of_classes = len(events_format)
        self.event_probabilities = [event['probability'] for event in events_format]
        self.event_labels = [event['name'] for event in events_format]
        assert sum(self.event_probabilities) <= 1

        # training
        self.load_signal_in_RAM = load_signal_in_RAM
        self.use_mask = use_mask
ds_train = DSLite(**dataset_params)

# model creation
model_params = {
    'input_shape': [int(ds_train.fsTime * ds_train.window), ds_train.nSpace, ds_train.nChannels], 
    'num_classes': len(events),
    'num_outputs': ds_train.window // ds_train.prediction_resolution,
    'depth': 9,
    'init_filter_num': 16,
    'filter_increment_factor': 2 ** (1 / 3),
    'max_pool_size': (2, 2),
    'kernel_size': (16, 3)
}

resunet = factory_ResUNet(**model_params)
resunet.summary() # print summary.
WARNING:tensorflow:From c:\Users\tavel\Desktop\Internship-Arcascope\2024_internship\.venv\Lib\site-packages\keras\src\backend\tensorflow\core.py:187: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.
Model: "functional_1"
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓
┃ Layer (type)         Output Shape          Param #  Connected to      ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩
│ input_layer         │ (None, 15360, 32, │          0 │ -                 │
│ (InputLayer)        │ 2)                │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ zero_padding2d      │ (None, 16384, 32, │          0 │ input_layer[0][0] │
│ (ZeroPadding2D)     │ 2)                │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d (Conv2D)     │ (None, 16384, 32, │      1,552 │ zero_padding2d[0… │
│                     │ 16)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalization │ (None, 16384, 32, │         64 │ conv2d[0][0]      │
│ (BatchNormalizatio…16)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_1 (Conv2D)   │ (None, 8192, 16,  │      1,300 │ batch_normalizat… │
│                     │ 20)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 8192, 16,  │         80 │ conv2d_1[0][0]    │
│ (BatchNormalizatio…20)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_2 (Conv2D)   │ (None, 8192, 16,  │     19,220 │ batch_normalizat… │
│                     │ 20)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 8192, 16,  │         80 │ conv2d_2[0][0]    │
│ (BatchNormalizatio…20)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_3 (Conv2D)   │ (None, 4096, 8,   │      2,025 │ batch_normalizat… │
│                     │ 25)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 4096, 8,   │        100 │ conv2d_3[0][0]    │
│ (BatchNormalizatio…25)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_4 (Conv2D)   │ (None, 4096, 8,   │     30,025 │ batch_normalizat… │
│                     │ 25)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 4096, 8,   │        100 │ conv2d_4[0][0]    │
│ (BatchNormalizatio…25)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_5 (Conv2D)   │ (None, 2048, 4,   │      3,232 │ batch_normalizat… │
│                     │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 2048, 4,   │        128 │ conv2d_5[0][0]    │
│ (BatchNormalizatio…32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_6 (Conv2D)   │ (None, 2048, 4,   │     49,184 │ batch_normalizat… │
│                     │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 2048, 4,   │        128 │ conv2d_6[0][0]    │
│ (BatchNormalizatio…32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_7 (Conv2D)   │ (None, 1024, 2,   │      5,160 │ batch_normalizat… │
│                     │ 40)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 1024, 2,   │        160 │ conv2d_7[0][0]    │
│ (BatchNormalizatio…40)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_8 (Conv2D)   │ (None, 1024, 2,   │     51,240 │ batch_normalizat… │
│                     │ 40)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 1024, 2,   │        160 │ conv2d_8[0][0]    │
│ (BatchNormalizatio…40)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_9 (Conv2D)   │ (None, 512, 1,    │      8,050 │ batch_normalizat… │
│                     │ 50)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 512, 1,    │        200 │ conv2d_9[0][0]    │
│ (BatchNormalizatio…50)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_10 (Conv2D)  │ (None, 512, 1,    │     40,050 │ batch_normalizat… │
│                     │ 50)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 512, 1,    │        200 │ conv2d_10[0][0]   │
│ (BatchNormalizatio…50)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_11 (Conv2D)  │ (None, 256, 1,    │      6,464 │ batch_normalizat… │
│                     │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 256, 1,    │        256 │ conv2d_11[0][0]   │
│ (BatchNormalizatio…64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_12 (Conv2D)  │ (None, 256, 1,    │     65,600 │ batch_normalizat… │
│                     │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 256, 1,    │        256 │ conv2d_12[0][0]   │
│ (BatchNormalizatio…64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_13 (Conv2D)  │ (None, 128, 1,    │     10,320 │ batch_normalizat… │
│                     │ 80)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 128, 1,    │        320 │ conv2d_13[0][0]   │
│ (BatchNormalizatio…80)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_14 (Conv2D)  │ (None, 128, 1,    │    102,480 │ batch_normalizat… │
│                     │ 80)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 128, 1,    │        320 │ conv2d_14[0][0]   │
│ (BatchNormalizatio…80)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_15 (Conv2D)  │ (None, 64, 1,     │     16,261 │ batch_normalizat… │
│                     │ 101)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 64, 1,     │        404 │ conv2d_15[0][0]   │
│ (BatchNormalizatio…101)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_16 (Conv2D)  │ (None, 64, 1,     │    163,317 │ batch_normalizat… │
│                     │ 101)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 64, 1,     │        404 │ conv2d_16[0][0]   │
│ (BatchNormalizatio…101)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_17 (Conv2D)  │ (None, 32, 1,     │     25,984 │ batch_normalizat… │
│                     │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 32, 1,     │        512 │ conv2d_17[0][0]   │
│ (BatchNormalizatio…128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_18 (Conv2D)  │ (None, 32, 1,     │    262,272 │ batch_normalizat… │
│                     │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 32, 1,     │        512 │ conv2d_18[0][0]   │
│ (BatchNormalizatio…128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose    │ (None, 64, 1,     │     25,957 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 101)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 64, 1,     │        404 │ conv2d_transpose… │
│ (BatchNormalizatio…101)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate         │ (None, 64, 1,     │          0 │ batch_normalizat… │
│ (Concatenate)       │ 202)              │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_19 (Conv2D)  │ (None, 64, 1,     │    326,533 │ concatenate[0][0] │
│                     │ 101)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 64, 1,     │        404 │ conv2d_19[0][0]   │
│ (BatchNormalizatio…101)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose_1  │ (None, 128, 1,    │     16,240 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 80)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 128, 1,    │        320 │ conv2d_transpose… │
│ (BatchNormalizatio…80)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_1       │ (None, 128, 1,    │          0 │ batch_normalizat… │
│ (Concatenate)       │ 160)              │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_20 (Conv2D)  │ (None, 128, 1,    │    204,880 │ concatenate_1[0]… │
│                     │ 80)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 128, 1,    │        320 │ conv2d_20[0][0]   │
│ (BatchNormalizatio…80)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose_2  │ (None, 256, 1,    │     10,304 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 256, 1,    │        256 │ conv2d_transpose… │
│ (BatchNormalizatio…64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_2       │ (None, 256, 1,    │          0 │ batch_normalizat… │
│ (Concatenate)       │ 128)              │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_21 (Conv2D)  │ (None, 256, 1,    │    131,136 │ concatenate_2[0]… │
│                     │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 256, 1,    │        256 │ conv2d_21[0][0]   │
│ (BatchNormalizatio…64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose_3  │ (None, 512, 1,    │      6,450 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 50)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 512, 1,    │        200 │ conv2d_transpose… │
│ (BatchNormalizatio…50)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_3       │ (None, 512, 1,    │          0 │ batch_normalizat… │
│ (Concatenate)       │ 100)              │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_22 (Conv2D)  │ (None, 512, 1,    │     80,050 │ concatenate_3[0]… │
│                     │ 50)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 512, 1,    │        200 │ conv2d_22[0][0]   │
│ (BatchNormalizatio…50)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose_4  │ (None, 1024, 2,   │      8,040 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 40)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 1024, 2,   │        160 │ conv2d_transpose… │
│ (BatchNormalizatio…40)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_4       │ (None, 1024, 2,   │          0 │ batch_normalizat… │
│ (Concatenate)       │ 80)               │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_23 (Conv2D)  │ (None, 1024, 2,   │    102,440 │ concatenate_4[0]… │
│                     │ 40)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 1024, 2,   │        160 │ conv2d_23[0][0]   │
│ (BatchNormalizatio…40)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose_5  │ (None, 2048, 4,   │      5,152 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 2048, 4,   │        128 │ conv2d_transpose… │
│ (BatchNormalizatio…32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_5       │ (None, 2048, 4,   │          0 │ batch_normalizat… │
│ (Concatenate)       │ 64)               │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_24 (Conv2D)  │ (None, 2048, 4,   │     98,336 │ concatenate_5[0]… │
│                     │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 2048, 4,   │        128 │ conv2d_24[0][0]   │
│ (BatchNormalizatio…32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose_6  │ (None, 4096, 8,   │      3,225 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 25)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 4096, 8,   │        100 │ conv2d_transpose… │
│ (BatchNormalizatio…25)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_6       │ (None, 4096, 8,   │          0 │ batch_normalizat… │
│ (Concatenate)       │ 50)               │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_25 (Conv2D)  │ (None, 4096, 8,   │     60,025 │ concatenate_6[0]… │
│                     │ 25)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 4096, 8,   │        100 │ conv2d_25[0][0]   │
│ (BatchNormalizatio…25)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose_7  │ (None, 8192, 16,  │      2,020 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 20)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 8192, 16,  │         80 │ conv2d_transpose… │
│ (BatchNormalizatio…20)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_7       │ (None, 8192, 16,  │          0 │ batch_normalizat… │
│ (Concatenate)       │ 40)               │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_26 (Conv2D)  │ (None, 8192, 16,  │     38,420 │ concatenate_7[0]… │
│                     │ 20)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 8192, 16,  │         80 │ conv2d_26[0][0]   │
│ (BatchNormalizatio…20)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_transpose_8  │ (None, 16384, 32, │      1,296 │ batch_normalizat… │
│ (Conv2DTranspose)   │ 16)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 16384, 32, │         64 │ conv2d_transpose… │
│ (BatchNormalizatio…16)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_8       │ (None, 16384, 32, │          0 │ batch_normalizat… │
│ (Concatenate)       │ 32)               │            │ batch_normalizat… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d_27 (Conv2D)  │ (None, 16384, 32, │     24,592 │ concatenate_8[0]… │
│                     │ 16)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ batch_normalizatio… │ (None, 16384, 32, │         64 │ conv2d_27[0][0]   │
│ (BatchNormalizatio…16)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ lambda (Lambda)     │ (None, 15360, 32, │          0 │ batch_normalizat… │
│                     │ 16)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ reshape (Reshape)   │ (None, 15360,     │          0 │ lambda[0][0]      │
│                     │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv1d (Conv1D)     │ (None, 15360, 16) │      8,208 │ reshape[0][0]     │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ average_pooling1d   │ (None, 1024, 16)  │          0 │ conv1d[0][0]      │
│ (AveragePooling1D)  │                   │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv1d_1 (Conv1D)   │ (None, 1024, 4)   │         68 │ average_pooling1… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ dense (Dense)       │ (None, 1024, 4)   │         20 │ conv1d_1[0][0]    │
└─────────────────────┴───────────────────┴────────────┴───────────────────┘
 Total params: 2,024,936 (7.72 MB)
 Trainable params: 2,021,032 (7.71 MB)
 Non-trainable params: 3,904 (15.25 KB)