bonjour,

à partir de ce modèle MNIST, j'obtiens la prédiction.
je souhaite introduire un seuil des valeurs possibles de niveau de gris. ce seuillage devrait faire varier cette prédiction.
Or, avec ce que j'ai fait (actuellement en commentaire), la prédiction passe de 0,98 sans seuil à 0,09 quel que soit le seuil (entre 0 et 255)
je souhaite obtenir un tableau à deux entrées : seuil et accuracy.

que dois-je modifier dans mon code pour obtenir cette variation d'accuracy en fonction du niveau de gris ?

merci !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import numpy as np
import keras
from keras import layers
num_classes = 10
input_shape = (28, 28, 1)
#seuil = 250
 
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
 
# Seuillage
#y_train_thresh = np.where(x_train > seuil, 255, 0)
#x_test_thresh = np.where(x_test > seuil, 255, 0)
 
x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255
x_train = np.expand_dims(x_train, -1)
x_test = np.expand_dims(x_test, -1)
print("x_train shape:", x_train.shape)
print(x_train.shape[0], "train samples")
print(x_test.shape[0], "test samples")
 
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
 
model = keras.Sequential(
    [
        keras.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)
 
model.summary()
 
batch_size = 128
epochs = 2
 
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
 
#model.fit(x_train_thresh, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
 
score = model.evaluate(x_test, y_test, verbose=0)
print("Test loss:", score[0])
print("Test accuracy:", score[1])