Qu'est-ce que l'apprentissage par réseau neuronal? Les données de formation sont utilisées pour apprendre la combinaison de questions (entrée / données) et de réponses (sortie / étiquette). Et si vous utilisez des données de test comme entrée de ce réseau formé, En analysant la sortie obtenue, les performances du réseau neuronal peuvent être mesurées.
Environnement Python dans VScode utilisant la base d'Anaconda. Je voudrais en parler dans un autre article.
Il sera plus facile à comprendre si vous étudiez tout en donnant des exemples d'utilisation. Nous vous serions reconnaissants si vous pouviez examiner de plus près les commentaires du programme.
・ Comment former MNIST par apprentissage automatique général (pas CNN, RNN, LSTM)
mnist.py
#Importez la bibliothèque MNIST.
from keras.datasets import mnist
from keras import models
from keras import layers
from keras import optimizers
from keras import regularizers
from keras import utils
#Données d'entraînement(50000 pièces)Et tester les données(10000 pièces)Préparer.
#Cette fois, la méthode holdout est utilisée comme évaluation,
#Lorsque les données sont petites, il est nécessaire de considérer la vérification d'intersection de division k et la vérification d'intersection aléatoire de division k.
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
print(train_images.shape)
print(len(train_labels))
print(train_labels)
print(test_images.shape)
print(len(test_labels))
print(test_labels)
#Créez un modèle de pile linéaire.
network = models.Sequential()
#Dense fait référence à une couche étroitement couplée.
# add()Vous pouvez ajouter des couches avec.
#unités est le nombre de cellules.
# kernel_Le régulariseur empêche le sur-apprentissage en rendant les valeurs de poids du réseau régulières.
# kernel_La régularisation L1 et la régularisation L2 sont appliquées au régularisateur, mais l'une ou l'autre peut ou non être utilisée.
#l'activation est un type de fonction d'activation
# input_la forme est des tableaux de formes(*, 28*28).. Formellement difficile à comprendre.
#L'abandon force une partie des données à se propager de la couche immédiatement précédente à la couche immédiatement suivante à 0.
#Le surapprentissage peut être évité en ajoutant intentionnellement du bruit. Fondamentalement, il est placé dans la couche intermédiaire, mais ce n'est pas nécessaire.
network.add(layers.Dense(units=512,
kernel_regularizer=regularizers.l1_l2(l1=0.001, l2=0.001),
activation='relu',
input_shape=(28 * 28, ))) #Couche entièrement connectée
network.add(layers.Dropout(0.25)) #Couche d'abandon
network.add(layers.Dense(units=10,
activation='softmax')) #Couche Softmax
#Vous devez compiler pour vous préparer à former votre réseau.
#La fonction objectif peut être définie avec perte, cette fois l'erreur d'entropie croisée.
#Vous pouvez définir la méthode d'apprentissage avec un optimiseur, tel que SGD, momentum SGD, AdaGrad, RMSprop.
# metrics=['accuracy']Moyens de calculer le taux de réponse correct.
network.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
#Prétraitez les données MNIST avant l'entraînement.
#La valeur du tenseur est 0 car il nécessite beaucoup de calcul.~Il est nécessaire de concevoir comme le mettre entre 1.
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255
print(train_images.shape)
print(train_images)
print(test_images.shape)
print(test_images)
#production(étiquette)Est le nombre "0",1,2,3,~,Puisqu'il est divisé en "9", il est nécessaire de l'encoder avec une valeur de catégorie.
# [1, 0, 0, 0, 0, 0, 0, 0, 0]…0
# [0, 0, 1, 0, 0, 0, 0, 0, 0]…2
# [0, 0, 0, 0, 0, 1, 0, 0, 0]…6
#J'aime 0,1 représente un nombre.
train_labels = utils.to_categorical(train_labels)
test_labels = utils.to_categorical(test_labels)
#Maintenant que nous sommes prêts à entraîner le réseau, nous appelons la méthode d'ajustement pour adapter le modèle aux données d'entraînement.
#Entrez les données d'entrée et de sortie des données d'entraînement dans les arguments.
#epochs est le nombre de fois où toutes les données sont utilisées. Il montre combien de fois toutes les données sont utilisées, et un surapprentissage se produit si elles sont trop utilisées.
# batch_size indique combien de divisions les données d'entrée utilisées pour la formation doivent être divisées.
#Cette fois, c'est 50 000 données, donc 50 000 ÷ 100=À 500,"1"Apprenez avec 500 données 100 fois par époque. Je ne connais pas la raison détaillée.
network.fit(train_images, train_labels, epochs=10, batch_size=100)
#Réseau immédiatement formé(network)En utilisant,
#Valeur de perte dans les données de test(loss)Et taux de réponse correct(accuracy)Demander.
#Entrez les données d'entrée et de sortie des données de test dans l'argument.
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)
#Le résultat est, "# test_acc: 0.9795 ", mais la valeur varie en fonction de l'environnement.
#La raison en est que Keras choisit au hasard une valeur de départ lors de l'initialisation du réseau.
・ Comment former MNIST avec LSTM
mnist_1.py
Recommended Posts