| import tensorflow as tf | |
| from tensorflow.keras.models import Sequential | |
| from tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout, BatchNormalization | |
| # ------------------------- | |
| # Construction du modèle CNN | |
| # ------------------------- | |
| def build_cnn_model(input_shape, num_classes, filter1, filter2, filter3, learning_rate, dropout): | |
| model = Sequential() | |
| # 1er bloc convolution | |
| model.add(Conv1D(filters=filter1, kernel_size=3, activation='relu', padding='same', input_shape=input_shape)) | |
| model.add(BatchNormalization()) | |
| model.add(MaxPooling1D(pool_size=2)) | |
| # 2e bloc | |
| model.add(Conv1D(filters=filter2, kernel_size=3, activation='relu', padding='same')) | |
| model.add(BatchNormalization()) | |
| model.add(MaxPooling1D(pool_size=2)) | |
| # 3e bloc | |
| model.add(Conv1D(filters=filter3, kernel_size=3, activation='relu', padding='same')) | |
| model.add(BatchNormalization()) | |
| model.add(MaxPooling1D(pool_size=2)) | |
| # Fully connected | |
| model.add(Flatten()) | |
| model.add(Dense(256, activation='relu')) | |
| model.add(Dropout(dropout)) | |
| model.add(Dense(num_classes, activation='softmax')) | |
| model.compile( | |
| optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate), | |
| loss='categorical_crossentropy', | |
| metrics=['accuracy'] | |
| ) | |
| return model | |