Remarques sur la création d'un CNN avec Keras et sa classification à l'aide de l'ensemble de données CIFAR-10
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPool2D
from keras.optimizers import Adam
from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.utils import plot_model
from keras.callbacks import TensorBoard
from keras.datasets import cifar10
from keras.utils import np_utils
(X_train, y_train),(X_test, y_test) = cifar10.load_data()
Est stocké.
Normaliser chaque valeur de pixel dans la plage de 0-1
#Conversion de type en float
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
#Normaliser chaque valeur de pixel
X_train /= 255.0
X_test /= 255.0
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
Conversion en représentation unique pour les classes nb_classes avec np_utils.to_categorical. Comme il y a 10 classes cette fois, nous définissons `` nb_classes = 10 ''.
Définir réellement le modèle,
#Définition du modèle
model = Sequential()
model.add(Conv2D(32,3,input_shape=(32,32,3)))
model.add(Activation('relu'))
model.add(Conv2D(32,3))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Conv2D(64,3))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(1.0))
model.add(Dense(nb_classes, activation='softmax'))
adam = Adam(lr=1e-4)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=["accuracy"])
Définissez un objet modèle avec model.Sequential (). Il est possible d'ajouter des éléments avec model.add (). Le premier model.add () ajoute une couche de convolution 32x32 (noyau 3x3), et comme l'image d'entrée est une image RVB 32x32, la couche d'entrée est `ʻinput_shape (32,32,3). Il peut être défini par ``. Utilisez Activation () pour ajouter la fonction d'activation et Dense () pour ajouter la couche entièrement connectée. Définissez model.compile () pour obtenir Adam comme méthode d'optimisation, l'entropie croisée comme fonction d'erreur et la précision comme calcul.
history = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1, validation_split=0.1)
Vous pouvez apprendre avec model.fit (). Cette fois, nous définissons nb_epoch = 100
pour définir le nombre d'époques à 100.
varidation_split est un paramètre qui utilise un certain pourcentage des données d'entraînement pour le test. Cette fois, 10% sont utilisés pour le test.
Visualisez les données avec Keras
#Tracer le modèle
plot_model(model, to_file='./model2.png')
Étant donné que le modèle entraîné peut être enregistré sous forme de fichier, les données de configuration du modèle peuvent être enregistrées sous forme de fichier JSON et les données de poids du modèle peuvent être enregistrées sous forme de fichier HDF5.
json_string = model.to_json()
open(os.path.join('./', 'cnn_model.json'), 'w').write(json_string)
model.save_weights(os.path.join('./', 'cnn_model_weight.hdf5'))
Étant donné que Tensorflow est utilisé pour le back-end cette fois, Tensorboar peut également être utilisé ci-dessous. [Keras / TensorFlow] Utilisation de TensorBoard avec Keras
Nous avons construit CNN avec Keras et classé 10 catégories avec CIFAR-10. De là, je vais essayer diverses choses.
Source Code https://github.com/sasayabaku/Machine-Learning/blob/master/Example_CNN/cifar10.ipynb
Keras Documentation Deep Learning commençant par Keras
Recommended Posts