[PYTHON] J'ai essayé AutoKeras

Dans l'industrie du machine learning, les temps sont vraiment "AutoML", mais il semble que Keras dispose également d'un framework qui prend en charge AutoML.

Qu'est-ce que Auto Keras

AutoKeras est un module Keras compatible AutoML développé au DATA Lab of Texas A & M University. L'objectif est de permettre à chacun d'accéder à l'apprentissage automatique. image.png

conditions

Les conditions d'exécution d'AutoKeras sont les suivantes.

--Python 3.5 et supérieur --TensorFlow 2.1.0 ou supérieur

Il s'appelait autrefois PyTorch, mais maintenant il est basé sur TensorFlow.

Installation

L'installation d'AutoKeras est facile et vous pouvez le faire avec un seul pip. image.png

échantillon

Si vous essayez d'implémenter le MNIST familier, le code ressemblera à ceci:

from tensorflow.keras.datasets import mnist

import autokeras as ak

# Prepare the dataset.
(x_train, y_train), (x_test, y_test) = mnist.load_data()
print(x_train.shape)  # (60000, 28, 28)
print(y_train.shape)  # (60000,)
print(y_train[:3])  # array([7, 2, 1], dtype=uint8)

# Initialize the ImageClassifier.
clf = ak.ImageClassifier(max_trials=3)
# Search for the best model.
clf.fit(x_train, y_train, epochs=10)
# Evaluate on the testing data.
print('Accuracy: {accuracy}'.format(accuracy=clf.evaluate(x_test, y_test)))

La création du modèle se termine par une simple fonction appelée "ImageClassifier ()". Il est difficile de croire que cela seul rendra les ajustements de calque et même les paramètres bons.

Machine d'identification

Les 6 types suivants de discriminateurs intégrés sont disponibles.

--ImageClassifier --ImageRegressor --TextClassifier --TextRegressor --StructuredDataClassifier --StructuredDataRegressor

C'est comme [image, texte, données structurées] x [classification, régression]. Une machine d'identification à usage général (AutoModel) est également disponible.

"Max_trials" est fourni comme argument, et il s'agit du nombre d'essais de modèle. Plus vous en avez, plus vous pouvez essayer de modèles, mais bien sûr, cela prend beaucoup de temps.

Fonctions et paramètres

En tant que fonction principale, familier

Est préparé. Au moment de "fit ()", le modèle est essayé et l'entraînement est répété avec le nombre d'époques spécifié (avec EarlyStopping).

De plus, lorsque l'essai du modèle est terminé, le résultat s'affiche comme suit.

Trial complete
Trial summary
|-Trial ID: 7721ba2b2344499c8cc23920528e1976
|-Score: 0.04051450350758387
|-Best step: 0
Hyperparameters:
|-classification_head_1/dropout_rate: 0.5
|-classification_head_1/spatial_reduction_1/reduction_type: flatten
|-dense_block_1/dropout_rate: 0
|-dense_block_1/num_layers: 1
|-dense_block_1/units_0: 128
|-dense_block_1/use_batchnorm: False
|-image_block_1/augment: False
|-image_block_1/block_type: vanilla
|-image_block_1/conv_block_1/dropout_rate: 0.25
|-image_block_1/conv_block_1/filters_0_0: 32
|-image_block_1/conv_block_1/filters_0_1: 64
|-image_block_1/conv_block_1/kernel_size: 3
|-image_block_1/conv_block_1/max_pooling: True
|-image_block_1/conv_block_1/num_blocks: 1
|-image_block_1/conv_block_1/num_layers: 2
|-image_block_1/conv_block_1/separable: False
|-image_block_1/normalize: True
|-optimizer: adam

De plus, pour pouvoir sortir le modèle optimal trouvé

Il existe également une fonction appelée. Le type de retour étant tf.keras.Model, vous pouvez l'utiliser de différentes manières.

Si vous obtenez la sortie ci-dessus avec export_model () et l'affichez avec summary (), ce sera comme suit.

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 28, 28, 1)]       0         
_________________________________________________________________
normalization (Normalization (None, 28, 28, 1)         3         
_________________________________________________________________
conv2d (Conv2D)              (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 24, 24, 64)        18496     
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 12, 12, 64)        0         
_________________________________________________________________
dropout (Dropout)            (None, 12, 12, 64)        0         
_________________________________________________________________
flatten (Flatten)            (None, 9216)              0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 9216)              0         
_________________________________________________________________
dense (Dense)                (None, 10)                92170     
_________________________________________________________________
classification_head_1 (Softm (None, 10)                0         
=================================================================
Total params: 110,989
Trainable params: 110,986
Non-trainable params: 3

Évaluation

Quand j'ai essayé de sortir la précision avec seulement 3 essais,

est devenu.

Quand je l'ai essayé avec un modèle Keras très général (je me suis référé à ici)

Parce que c'était le cas, il a été décidé que presque la même précision pouvait être obtenue automatiquement.

J'ai essayé d'essayer avec d'autres données (données structurées, etc.), mais parfois cela ne fonctionnait pas en raison d'une mémoire GPU insuffisante. .. ..

Résumé

Les conditions peuvent être limitées, mais c'est formidable de pouvoir facilement essayer l'apprentissage automatique. Cependant, il est extrêmement lent, vous voulez donc un matériel puissant.

prime

Cela a fonctionné sur CUDA 10.1, mais pas sur 10.2.

Recommended Posts

J'ai essayé AutoKeras
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'exécuter pymc
J'ai essayé le spoofing ARP
J'ai essayé d'utiliser Summpy
J'ai essayé Python> autopep8
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé le deep learning
J'ai essayé AWS CDK!
J'ai essayé d'utiliser Ipython
J'ai essayé de déboguer.
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé la mapview de Kivy
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé de déplacer EfficientDet
J'ai essayé la programmation shell
J'ai essayé d'utiliser doctest
J'ai essayé Python> décorateur
J'ai essayé d'exécuter TensorFlow
J'ai essayé Auto Gluon
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé AWS Iot
J'ai essayé l'optimisation bayésienne!
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé les réseaux d'itération de valeur
J'ai essayé de gratter avec Python
J'ai essayé la classification d'image d'AutoGluon
J'ai essayé d'apprendre PredNet
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser RandomForest
J'ai essayé le clustering avec PyCaret
J'ai essayé d'utiliser BigQuery ML
J'ai essayé "K-Fold Target Encoding"
J'ai essayé d'implémenter PCANet