Files

93 lines
4.0 KiB
Python
Raw Permalink Normal View History

2026-03-31 13:28:59 +02:00
import tensorflow as tf
from tensorflow.keras import layers, models
import config
def block_resnet(input, filters, kernel_size, reduce, dropout=0.):
result=layers.Conv2D(filters, kernel_size, strides=1, padding='SAME', activation='relu')(input)
if dropout is not 0.:
result=layers.Dropout(dropout)(result)
if reduce is True:
result=layers.Conv2D(filters, kernel_size, strides=2, padding='SAME')(result)
else:
result=layers.Conv2D(filters, kernel_size, strides=1, padding='SAME')(result)
if input.shape[-1]==filters:
if reduce is True:
shortcut=layers.Conv2D(filters, 1, strides=2, padding='SAME')(input)
else:
shortcut=input
else:
if reduce is True:
shortcut=layers.Conv2D(filters, 1, strides=2, padding='SAME')(input)
else:
shortcut=layers.Conv2D(filters, 1, strides=1, padding='SAME')(input)
result=layers.add([result, shortcut])
if dropout is not 0.:
result=layers.Dropout(dropout)(result)
result=layers.Activation('relu')(result)
result=layers.BatchNormalization()(result)
return result
def model(nbr):
entree=layers.Input(shape=(config.largeur, config.hauteur, 1), dtype='float32')
result=block_resnet(entree, 2*nbr, 3, False, 0.3)
result=block_resnet(result, 2*nbr, 3, False, 0.3)
result=block_resnet(result, 2*nbr, 3, False, 0.3)
result=block_resnet(result, 2*nbr, 3, True, 0.3)
result=block_resnet(result, 4*nbr, 3, False, 0.4)
result=block_resnet(result, 4*nbr, 3, False, 0.4)
result=block_resnet(result, 4*nbr, 3, False, 0.4)
result=block_resnet(result, 4*nbr, 3, False, 0.4)
result=block_resnet(result, 4*nbr, 3, False, 0.4)
result=block_resnet(result, 4*nbr, 3, False, 0.4)
result=block_resnet(result, 4*nbr, 3, True, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, False, 0.4)
result=block_resnet(result, 8*nbr, 3, True, 0.4)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=block_resnet(result, 16*nbr, 3, False, 0.5)
result=layers.AveragePooling2D()(result)
result=layers.Flatten()(result)
sortie=layers.Dense(5, activation='sigmoid')(result)
model=models.Model(inputs=entree, outputs=sortie)
return model