Intéressons nous ici à un modèle très simple qu’on peut construire, compiler et entraîner, une sorte de « Hello World » de TensorFlow.
Il y a un exemple sur le site de Tf : TensorFlow 2 quickstart for beginners. Le jeu de données est MNIST.
import tensorflow as tf
print (tf.__version__)
2.0.0
# Lecture du dataset
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
Les images MNIST sont carrées en 28.
Le jeu de données est préalablement réparti entre train et test.
x_train, x_test = x_train / 255.0, x_test / 255.0
Voici ce que dit A. Géron :
Moreover, since we are going to train the neural network using Gradient Descent, we must scale the input features. For simplicity, we just scale the pixel intensities down to the 0-1 range by dividing them by 255.0 (this also converts them to floats):
A vrai dire, ce n’est pas obligatoire dans notre cas en terme d’exécution mais les performantes sont différentes. Si on ne le fait pas, l’accuracy est de 84% alors que si on le fait, l’accuracy est supérieure à 97% ! preuve que si ce n’est pas obligatoire c’est fortement recommandé !
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10)
])
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
La fonction de coût préférée, dans le cas d’une classification non binaire, est SparseCategoricalCrossentropy
model.compile(optimizer='adam',
loss=loss_fn,
metrics=['accuracy'])
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
_________________________________________________________________
dense (Dense) (None, 128) 100480
_________________________________________________________________
dropout (Dropout) (None, 128) 0
_________________________________________________________________
dense_1 (Dense) (None, 10) 1290
=================================================================
Total params: 101,770
Trainable params: 101,770
Non-trainable params: 0
_________________________________________________________________
model.fit(x_train, y_train, epochs=5)
Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 19s 315us/sample - loss: 0.3000 - accuracy: 0.9128
Epoch 2/5
60000/60000 [==============================] - 16s 269us/sample - loss: 0.1476 - accuracy: 0.9561
Epoch 3/5
60000/60000 [==============================] - 16s 271us/sample - loss: 0.1076 - accuracy: 0.9675
Epoch 4/5
60000/60000 [==============================] - 17s 279us/sample - loss: 0.0884 - accuracy: 0.9723
Epoch 5/5
60000/60000 [==============================] - 17s 275us/sample - loss: 0.0765 - accuracy: 0.9760