J'ai eu l'occasion d'écrire Keras, alors je l'ai traduit en japonais.
Getting started with the Keras Sequential model
Le modèle séquentiel est réalisé en empilant des couches.
Vous pouvez créer un séquentiel en donnant une instance du calque au constructeur du séquentiel. Le calque étant donné le Dense
, ʻActivation` ci-dessous (au fait, Dense est le soi-disant réseau de neurones entièrement connecté).
from Keras.models import Sequential
model = Sequential([
Dense(32, input_dim=784),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
Vous pouvez également ajouter des couches en utilisant la méthode .add ()
.
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
Specifying the input shape Le modèle doit savoir ce qui entre dans le nombre de dimensions de l'entrée. Par conséquent, il est nécessaire de donner des informations sur la dimension d'entrée à la première couche du modèle séquentiel (les autres couches peuvent déduire automatiquement le nombre de dimensions). Il existe trois manières de procéder.
Voici ce que j'ai mis dans mon code:
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model = Sequential()
model.add(Dense(32, batch_input_shape=(None, 784)))
# note that batch dimension is "None" here,(Bien que la taille du lot soit Aucune)
# so the model will be able to process batches of any size(Vous pouvez maintenant connaître la taille de lot que vous avez)
model = Sequential()
model.add(Dense(32, input_dim=784))
Et les trois codes suivants ont la même signification.
model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
model = Sequential()
model.add(LSTM(32, batch_input_shape=(None, 10, 64)))
model = Sequential()
model.add(LSTM(32, input_length=10, input_dim=64))
The Merge layer Il est possible d'intégrer plusieurs instances séquentielles de sorte qu'une sortie soit sortie. Le séquentiel de sortie peut être superposé sur un nouveau séquentiel. Voici un exemple et un diagramme conceptuel des couches.
from keras.layers import Merge
left_branch = Sequential()
left_branch.add(Dense(32, input_dim=784))
right_branch = Sequential()
right_branch.add(Dense(32, input_dim=784))
merged = Merge([left_branch, right_branch], mode='concat')
final_model = Sequential()
final_model.add(merged)
final_model.add(Dense(10, activation='softmax'))
La fusion a plusieurs modes qui peuvent décrire comment fusionner deux tenseurs.
sum
(par défaut): Ajouter pour chaque élément.concat
: Concaténer les tenseurs. Spécifiez les dimensions concaténées avec l'argument concat_axis
.mul
: multiplie chaque élément.dot
: Produit intérieur. Spécifiez la dimension à prendre pour le produit intérieur avec l'argument dot_axes
.cos
: prend la proximité cosinus pour un tenseur à deux dimensions.Toute formule de calcul peut être décrite dans l'argument mode à l'aide d'une formule lambda ou similaire.
merged = Merge([left_branch, right_branch], mode=lambda x, y: x - y)
Si vous voulez construire un modèle complexe qui ne peut pas être représenté par Sequential et Merge, vous devez vous référer à l'API de fonction.
Compilation
Il est nécessaire de définir le processus de formation avant de former le modèle.
Cela se fait par la méthode compile
. La méthode compile
prend les trois arguments suivants.
telle que l'argument ʻoptimizer
. rmsprop
ou ʻadagrad`. Voir optimizers.metrics = ['exactitude']
dans la tâche de classification. Actuellement, seule "précision" est implémentée.# for a multi-class classification problem
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# for a binary classification problem
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# for a mean squared error regression problem
model.compile(optimizer='rmsprop',
loss='mse')
Training Dans Keras, la formation est effectuée avec l'entrée et le libellé du tableau Numpy. La fonction «fit» est souvent utilisée dans la phase d'apprentissage.
# for a single-input model with 2 classes(binary):(Classification à deux classes)
model = Sequential()
model.add(Dense(1, input_dim=784, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# generate dummy data(Créer des données d'entrée appropriées)
import numpy as np
data = np.random.random((1000, 784))
labels = np.random.randint(2, size=(1000, 1))
# train the model, interating on the data in batches(Apprenez avec la taille de lot 32)
# of 32 samples
model.fit(data, labels, nb_epoch=10, batch_size=32)
# for a multi-input model with 10 classes:(Classement en 10 classes)
left_branch = Sequential()
left_branch.add(Dense(32, input_dim=784))
right_branch = Sequential()
right_branch.add(Dense(32, input_dim=784))
merged = Merge([left_branch, right_branch], mode='concat')
model = Sequential()
model.add(merged)
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# generate dummy data(Créer des données d'entrée appropriées)
import numpy as np
from keras.utils.np_utils import to_categorical
data_1 = np.random.random((1000, 784))
data_2 = np.random.random((1000, 784))
# these are integers between 0 and 9(Générer des valeurs entières de 0 à 9)
labels = np.random.randint(10, size=(1000, 1))
# we convert the labels to a binary matrix of size (1000, 10)(À utiliser dans les tâches de classification multi-classes 1-Convertir en vecteur chaud)
# for use with categorical_crossentropy
labels = to_categorical(labels, 10)
# train the model
#note that we are passing a list of Numpy arrays as training data
# since the model has 2 inputs(Prend deux entrées comme arguments)
model.fit([data_1, data_2], labels, nb_epoch=10, batch_size=32)
Examples Il existe quelques exemples d'implémentation. Consultez l'original Keras.
Recommended Posts