Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Premiers pas en deep learning, avec Keras

Premiers pas en deep learning, avec Keras

Présentation réalisée le 09/02/2017 lors de snowcamp.io , Grenoble.

https://snowcamp2017.sched.com/event/90YI/premiers-pas-en-deep-learning-avec-keras

Manuel Verriez

February 09, 2017
Tweet

More Decks by Manuel Verriez

Other Decks in Technology

Transcript

  1. Classifions du vin avec Keras Alcool Acide malique Alcalinité des

    cendres Magnesium Phénols … OD280/OD315 Proline https://archive.ics.uci.edu/ml/datasets/Wine
  2. Classifions du vin avec Keras Alcool Acide malique Cendres Alcalinité

    des cendres Magnesium Phénols Flavanoïdes Non-Flavanoïdes Proanthocyanidins Intensité de la couleur Teinte OD280/OD315 Proline Producteur Input Output https://archive.ics.uci.edu/ml/datasets/Wine
  3. Classifions du vin avec Keras https://archive.ics.uci.edu/ml/datasets/Wine Alcool Acide malique Cendres

    Alcalinité des cendres Magnesium Phénols Flavanoïdes Non-Flavanoïdes Proanthocyanidins Intensité de la couleur Teinte OD280/OD315 Proline Producteur Input Output 14.23 1.71 2.43 15.6 Producteur numéro 3 ! ? 40 15 1 10 14.6 18 21
  4. Classifions du vin avec Keras • MLP avec Keras. •

    1 “Input Layer” avec 13 noeuds en entrée + 1 (biais) • 1 “Hidden Layer” avec 16 neurones • 1 “Output Layer” avec 3 noeuds de sortie
  5. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20)
  6. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation(‘softmax’)) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Model : Sequential ou Functional
  7. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation(‘softmax’)) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Layer : Dense, Activation, Dropout, Flatten, Reshape, Permute, Merge, convolutional, recurrent, etc.
  8. Introduction à Keras model = Sequential() model.add(Dense(32, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation(‘softmax’)) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Activation : softmax,softplus, softsign, relu, tanh, sigmoid, hard_sigmoid, linear
  9. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation(‘softmax’)) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Initialisation des poids : uniform, lecun, normal, zero, one, etc.
  10. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation('sigmoid')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Objectives : categorical_crossentrop y, mse, binary_crossentropy, custom function, etc..
  11. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation('sigmoid')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Optimizer : adam, SGD, RMSProp, Adagrad, etc.
  12. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation('sigmoid')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Metrics : accuracy, mse, categorical_accuracy, etc.
  13. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation(‘softmax’)) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) On entraîne le modèle avec X en entrée, y en sortie visée.
  14. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation(‘softmax’)) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Donne le nombre itérations
  15. Introduction à Keras model = Sequential() model.add(Dense(16, input_dim = 13,

    init='uniform', bias=True)) model.add(Activation('relu')) model.add(Dense(3, init='uniform')) model.add(Activation(‘softmax’)) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, nb_epoch=200, validation_split=.20) Teste le modèle sur 20% des données
  16. Classifions les images avec Keras Keras fournit des modèles pré-entrainés

    sur des catégories ImageNet: • VGG16 • VGG19 • Xception • Resnet50 • InceptionV3
  17. Classifions les images avec Keras Option #3 : Utiliser un

    réseau existant et ajouter nos catégories
  18. Que peut-on faire avec un RNN? • Génération de texte

    • Traduction automatisée • Reconnaissance vocale • Auto-tag d’images ◦ Combiné avec CNN • Analyse sémantique • ...
  19. Que peut-on faire avec un RNN? • Génération de texte

    • Traduction automatisée • Reconnaissance vocale • Auto-tag d’images ◦ Combiné avec CNN • Analyse sémantique • ... https://twitter.com/_pandy/status/689209034143084547
  20. RNN avec Keras (LSTM) Analyse de sentiments (critique de films)

    “I love this movie” -> positive “That was the worst movie that I’ve seen in my life!” -> negative http://localhost:8889/notebooks/Guess-who/imdb.ipynb https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py
  21. RNN avec Keras (LSTM) Analyse de sentiments (critique de films)

    Run on GPU: 25000/25000 [==============================] - 121s - loss: 0.5194 - acc: 0.7396 - val_loss: 0.4093 - val_acc: 0.8224 Epoch 2/15 25000/25000 [==============================] - 114s - loss: 0.3720 - acc: 0.8405 - val_loss: 0.3715 - val_acc: 0.8341 Epoch 3/15 25000/25000 [==============================] - 113s - loss: 0.2962 - acc: 0.8778 - val_loss: 0.3964 - val_acc: 0.8306 Epoch 4/15 25000/25000 [==============================] - 112s - loss: 0.2374 - acc: 0.9060 - val_loss: 0.3832 - val_acc: 0.8426 Epoch 5/15 …. Epoch 13/15 25000/25000 [==============================] - 111s - loss: 0.0701 - acc: 0.9748 - val_loss: 0.6757 - val_acc: 0.8186 Epoch 14/15 25000/25000 [==============================] - 111s - loss: 0.0667 - acc: 0.9760 - val_loss: 0.6968 - val_acc: 0.8217 Epoch 15/15 25000/25000 [==============================] - 111s - loss: 0.0631 - acc: 0.9758 - val_loss: 0.6666 - val_acc: 0.8184 25000/25000 [==============================] - 20s Test score: 0.666597747941 Test accuracy: 0.81836
  22. RNN avec Keras Compréhension de texte: Facebook bAbI dataset (https://research.fb.com/projects/babi/)

    John travelled to the hallway. Mary journeyed to the bathroom. Daniel went back to the bathroom. John moved to the bedroom. Where is Mary? → bathroom Sandra travelled to the kitchen. Sandra travelled to the hallway. Mary went to the bathroom. Sandra moved to the garden. Where is Sandra? →garden Daniel went to the bathroom. John went to the garden. John went back to the bedroom. Mary journeyed to the office. Where is John? → bedroom Startup.ML Deep Learning Conference: François Chollet on Keras https://www.youtube.com/watch?v=YimQOpSRULY
  23. RNN avec Keras Compréhension de texte: Facebook bAbI dataset (https://research.fb.com/projects/babi/)

    Startup.ML Deep Learning Conference: François Chollet on Keras https://www.youtube.com/watch?v=YimQOpSRULY
  24. RNN avec Keras input_encoder = Sequential() input_encoder.add(Embedding(input_dim=vocab_size, output_dim=64)) input_encoder.add(LSTM(64, return_sequences=False))

    # output shape: (samples, 64) question_encoder = Sequential() question_encoder.add(Embedding(input_dim=vocab_size, output_dim=64)) question_encoder.add(LSTM(64, return_sequences=False)) # output shape: (samples, 64) model = Sequential() model.add(Merge([input_encoder, question_encoder], mode='concat',concat_axis=-1)) # output shape: (samples, 64*2) model.add(Dense(vocab_size)) model.add(Activation('softmax')) # output a probability distribution over all words model.compile(optimizer='adam', loss='categorical_crossentropy') print 'Training - reporting test accuracy after every iterations over the training data...' model.fit([inputs_train, queries_train], answers_train, batch_size=32, nb_epoch=50, show_accuracy=True, validation_data=([inputs_test, queries_test], answers_test)) Startup.ML Deep Learning Conference: François Chollet on Keras https://bitbucket.org/fchollet/keras_workshop
  25. RNN avec Keras Compréhension de texte: MemNN network Startup.ML Deep

    Learning Conference: François Chollet on Keras https://www.youtube.com/watch?v=YimQOpSRULY
  26. Pour aller plus loin • Import / export des modèles

    (avec ou sans poids) au format HDF5 • Import des modèles Keras vers Deeplearning4j • Distribution ◦ GPU / Instances avec Tensorflow ◦ Spark ( https://github.com/maxpumperla/elephas )
  27. Pour conclure Keras: https://keras.io Créé par François Chollet Août 2016

    - https://twitter.com/fchollet/status/765212287531495424
  28. Références Liens et référénces: https://keras.io https://archive.ics.uci.edu/ml/datasets/Wine http://ahogrammer.com/2016/11/15/deep-learning-enables-you-to-hide-screen-when-your-boss-is-approaching/ http://www.image-net.org/ https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

    https://medium.com/@ageitgey/machine-learning-is-fun-part-3-deep-learning-and-convolutional-neural-networks-f4035931872 1#.qpo3wxhaq https://www.youtube.com/watch?v=YimQOpSRU https://transcranial.github.io/keras-js Crédits icônes: http://www.flaticon.com/packs/essential-collection http://www.flaticon.com/packs/celebrations