ML classique :
et:
Feature engineering : transformer / créer des variables brutes en caractéristiques informatives pour améliorer les performances d’un modèle de machine learning.
Le réseau trouve lui même la meilleur représentation / transformation des données qui minimise la fonction de coût.
Donc l'étape manuelle de transformation des données basée sur l'expertise domaine du data scientist n'est plus nécessaire

deep network as a multistage information distillation process, where information goes through successive filters and comes out increasingly purified. Francois Chollet - Deep Learning with python
Francois Chollet - Deep Learning with python p25
https://playground.tensorflow.org/

Structure de représentation de données adapté à tous les types de données
| Type de donnée | Exemple |
|---|---|
| scalaire – rang 0 | 1 |
| vectoriel – rang 1 | [1, 2, 3, …] |
| matriciel – rang 2 | [[1, 2], [3, 4], [5, 6], …] |
| mais aussi – rang 3, 4, 5, … | [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11]], …] |
Pour N échantillons :
| Rang | Exemples |
|---|---|
| rang 2 | données tabulaires : N × P features samples, dataframe, csv, excel |
| rang 3 | images noir et blanc : N images × hauteur × largeur ; séries temporelles : samples, time, value |
| - N images × hauteur × largeur ; séries temporelles : samples, time, value | |
| - séries temporelles : samples, time, value | |
| rang 4 | images couleurs : N images × hauteur × largeur × channel (RGB) |
| rang 5 | vidéo : samples, frames, height, width, channels |

samples, height, width, color_depth (RGB)

On peut faire les opérations classiques sur les tenseurs de la même façon que sur les vecteurs ou matrices
import tensorflow as tf
tf.math.add(tensor1, tensor2),
tf.math.subtract(tensor1, tensor2),
tf.math.multiply(tensor1, tensor2),
tf.math.divide(tensor1, tensor2)
tf.math.square(tensor),
tf.math.sqrt(tensor),
tf.math.exp(tensor)
tenseur avec numpy
import numpy as np
batch_images = np.random.randint(0, 256,
size=(batch_size, height, width),
dtype=np.uint8)
Dans le MLP, le couche Flatten aplatit le tenseur des données en entrée
import tensorflow as tf
# Create a tensor
tensor = tf.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
# Print the original shape
print("Original shape:", tensor.shape)
# Flatten the tensor using tf.keras.layers.Flatten
flatten_layer = tf.keras.layers.Flatten()
flattened_tensor = flatten_layer(tensor)
# Print the flattened shape
print("Flattened shape:", flattened_tensor.shape)
La function softmax permet de transformer les valeurs de sortie du réseau en valeurs dans l'intervale [0,1] et donc interpretable comme des probabilités.
Dans un contexte de classification avec N classe, le reseau produit un array de dimension N.
La classe la plus probable est celle avec la plus grande valeur.
Voici un exemple sur un array arbitraire
# soit un array de taille 4
inputs = np.array([[1.1, 3.3, 4.4, 2.2]])
inputs = tf.convert_to_tensor(inputs)
print(f'input: {inputs.numpy()}')
# appliquer la fonction softmax
outputs = tf.keras.activations.softmax(inputs)
print(f'output: {outputs.numpy()}')
# on verifie que la somme des probabilité est bien 1
sum = tf.reduce_sum(outputs)
print(f'somme des proba: {sum}')
# La categorie la plus probable est
prediction = np.argmax(outputs)
print(f'index categorie la plus probable: {prediction}')
print(f'soit la valeur : {inputs.numpy()[0][prediction]}')
quelques opérations sur les tenseurs
Pour aller plus loin, le notebook de Tensorflow : https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/guide/tensor.ipynb
le modèle : Sequential
Observer l'influence :