dimanche 18 mars 2018

Comment utiliser Keras et Tensorflow et créer Android app (classifier)

Nous avons besoin d’entraîner un modèle de Keras (classifier), parce que nous allons utiliser le modèle dans tensorflow sur un android app.

D'abord, installer Keras.
Installer Keras dans Linux

Et tester l'apprentissage profond.
Installer Keras et tester l'apprentissage profond

Maintenant, vous pouvez utiliser Keras. Nous allons créer et entraîner un modèle de Keras.
(Le modèle de Keras est ce que vous pouvez préserver des poids appris ou des informations sur la façon dont les couches sont combinées.) Entraîner un modèle comme ça et créer un fichier .hdf5. J'ai crée un modèle de classification des animaux (animal_model.hdf5).   

Et nous devons transformer animal_model.hdf5 en fichier .pb pour le faire fonctionner sur tensorflow d'android. Pour le transformer, nous allons utiliser ça: keras_to_tensorflow

$ git clone https://github.com/amir-abdi/keras_to_tensorflow
$ cd ./keras_to_tensorflow

Et copier coller le fichier "animal_model.hdf5" dans le dossier "keras_to_tensorflow".

Et faire cette commande:
$ python3.5 keras_to_tensorflow.py -input_model_file ./animal_model.hdf5

Le fichier .pb va être généré dans ce dossier.

Maintenant, nous allons utiliser le modèle pour les applications de tensorflow sur android.
Comment utiliser les applications de tensorflow sur android

Dans le dossier "assets", ajouter le fichier .pb et label.txt.
Écrire les catégories dans le label.txt comme ça:
cat
dog



Changer le nom des fichier dans ClassifierActivity.java.

Et changer "input", "output", "IMAGE_SIZE", "IMAGE_MEAN", "IMAGE_STD".

Vous pouvez obtenir les noms de "input" et "output" comme ça:
>>> import tensorflow as tf
>>> gf = tf.GraphDef()
>>> gf.ParseFromString(open('/votre/path/de/fichier.pb','rb').read())
>>> [n.name + '=>' +  n.op for n in gf.node if n.op in ( 'Softmax','Placeholder')]

Le résultat:
['Mul=>Placeholder', 'final_result=>Softmax']
Mul est input, final_result est output.

Vous pouvez obtenir le "image_size" dans le fichier de python de Keras ce qui vous avez utilisé pour l'apprentissage:
ou...


Démarrer l'application.


Votre modelé sur tensorflow fonctionne comme ça :)  







Comment utiliser les applications de tensorflow sur android

Le guide de démarrage officiel est ici.

1. Installer Android Studio.

2. Si votre ordinateur est Windows, installer git pour windows.
(Ou, si vous utilisez Linux ou Mac, vous pouvez installer git sur la console comme: $ sudo apt-get install git)

3. Nous allons cloner le projet de tensorflow depuis Github. Ouvrir votre terminal (ou l'invite de commande) et faire cette commande:
git clone https://github.com/tensorflow/tensorflow

Et le projet de tensorflow va être copié dans le dossier actuel.



4. Ouvrir Android Studio, et choisir "Open an existing Android Studio project". Choisir le dossier copié de tensorflow "votre-directement-de-tensorflow/tensorflow/tensorflow/examples/android".


Cliquer sur "OK".

5. Ouvrir "build.gradle".

6. Chercher "def nativeBuildSystem" et changer "none" en "bazel".


Il va vous être demandé si vous voulez synchroniser. Cliquer sur "sync now".

6. Cliquer sur le bouton démarrer.

7. Les applis vont démarrer. Peut-être utiliser API27.





Si vous voulez changer la vue de résultat (de "classifier"), changer ici:

samedi 17 mars 2018

Comment enregistrer le modelé avec les poids appris par Keras

D'abord, nous avons besoin de Keras pour le faire fonctionner. (Installer Keras dans Linux, ou Keras dans Windows)
Et, pour le faire fonctionner, nous avons besoin de créer "animal" dossier.


Et "train" et "validate" dossiers dans le "animal" dossier.

Dans les "train" et "validate" dossiers, les catégories d'animal: "cat" et "dog".


Dans les dossiers, les photos de chat et chien.


Vous avez besoin de utiliser différentes photos pour les photos de "train" et de "validate".

Enregistrer ces lignes de code comme "animal.py" et faire "python3.5 aninal.py" . Ce code enregistre le modelé avec les poids appris. model.save enregistre le modelé (Le document de Keras).
from __future__ import print_function

import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
from keras.models import model_from_json
from keras.layers import Dense, Dropout, Activation, AlphaDropout
from keras.preprocessing.text import Tokenizer
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import os.path


f_log = './log'
f_model = './'
weights_filename = 'animal_model.hdf5'
model_filename = weights_filename

batch_size = 32
epochs = 5
nb_validation_samples = 14000

old_session = KTF.get_session()
print('Building model...')
session = tf.Session('')
KTF.set_session(session)

if os.path.isfile(os.path.join(f_model,weights_filename)):
    print('\n\n\n\nSaved parameters found. I will use this file...')
    print(os.path.join(f_model,model_filename + '\n\n\n\n'))
    model_hdf5 = os.path.join(f_model, model_filename)
    model = keras.models.load_model(model_hdf5)
    model.summary()
else:
    print('\n\n\n\n' + os.path.join(f_model,weights_filename))
    print('Saved parameters Not found. Creating new model...\n\n\n\n')
    model = Sequential()
    model.add(Conv2D(32, 3, 3, input_shape=(200, 200, 3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Conv2D(64, 3, 3))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Flatten())
    model.add(Dense(64))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(2))
    model.add(Activation('softmax'))

    model.summary()

    model.compile(loss='categorical_crossentropy',
                optimizer='adam',
                metrics=['accuracy'])

train_datagen = ImageDataGenerator(
    rescale=1.0 / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1.0 / 255)

train_generator = train_datagen.flow_from_directory(
    'animals/train',
    target_size=(200, 200),
    batch_size=batch_size,
    class_mode='categorical')

validation_generator = test_datagen.flow_from_directory(
    'animals/validation',
    target_size=(200, 200),
    batch_size=batch_size,
    class_mode='categorical')

tb_cb = keras.callbacks.TensorBoard(log_dir=f_log, histogram_freq=0)
cp_cb = keras.callbacks.ModelCheckpoint(filepath = os.path.join(f_model,weights_filename), monitor='val_loss', verbose=1, save_best_only=True, mode='auto')
cbks = [tb_cb, cp_cb]

history = model.fit_generator(
    train_generator,
    steps_per_epoch=np.ceil(nb_validation_samples/batch_size),
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=np.ceil(nb_validation_samples/batch_size),
    )

score = model.evaluate_generator(validation_generator, nb_validation_samples/batch_size)

print('')
print('Test score:', score[0])
print('Test accuracy:', score[1])
print('save weights')
model.save(os.path.join(f_model,weights_filename))
KTF.set_session(old_session)

Le fichier du modelé  

samedi 3 mars 2018

Installation de MariaDB

Contenu du didacticiel

  1. Vagrant et Virtual Box
  2. Installer Apache  / (Utiliser Nginx et PHP)
  3. Installer MySQL / MariaDB
  4. Installer PHP  / Python

MariaDB

D'abord, mettre yum à jour:
sudo yum update

Et installer MariaDB:
sudo yum install mariadb-server

Démarrer et activer MariaDB (pour CentOS 7)
sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Ou, si vous utilisez CentOS 6:
sudo service mariadb enable
$ sudo service mariadb start

Maintenant nous allons préparer MariaDB. C'est indispensable quand nous le demarrons pour la première fois. Exécuter cette commande:

$ sudo mysql_secure_installation

Et c'est fini :)

Exécuter cette commande pour se connecter dans MariaDB:
Si il n'y a pas un mot de passe:

$ mysql -u root


Si il y a un mot de passe:

$ mysql -u root -p(le mot de passe)



Si vous voulez changer le mot de passe en "root", exécuter ces commandes:

MariaDB[none]> use mysql;
MariaDB[mysql]> update user set password=PASSWORD("root") where User='root';
MariaDB[mysql]> flush privileges;
MariaDB[mysql]> exit;

Après, vous pouvez vous connecter dans MariaDB comme ça;

$ mysql -u root -proot