Registro de aprendizaje profundo de Keras 1: a partir de un conjunto de datos de mnist simple

Primero, conozca la red neuronal

Este artículo utiliza el conjunto de datos mnist para comprender las redes neuronales, aprender la biblioteca Keras de Python y comprender primero los siguientes conceptos antes de aprender.
1. Conjunto de datos MNIST : conjunto de datos clásico de aprendizaje automático, este conjunto de datos son imágenes digitales en escala de grises escritas a mano (28 píxeles x 28 píxeles), un total de diez categorías (0-9), incluidas 60.000 imágenes de entrenamiento y 10.000 imágenes de prueba.
2. Clase : una determinada categoría en un problema de clasificación de aprendizaje automático se denomina clase. Por ejemplo: diez números del 0 al 9, hay 10 categorías.
3. Muestra : los puntos de datos se denominan muestras, que son todas imágenes en el conjunto de datos mnist.
4. Etiqueta : La clase correspondiente a una muestra se llama etiqueta.
Por ejemplo: la etiqueta correspondiente a la figura siguiente es 9.
Inserte la descripción de la imagen aquí

2. Clasificación de dígitos escritos a mano

Los pasos para construir una red neuronal en Keras son los siguientes:
1. Cargue el conjunto de datos mnist en Keras

from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

train_iamges y train_labels constituyen el conjunto de entrenamiento (conjunto de entrenamiento) del modelo, el modelo aprende a través del conjunto de entrenamiento;
test_images y test_labels constituyen el conjunto de prueba del modelo (conjunto de prueba) , el modelo se prueba a través del conjunto de prueba; la
imagen está codificada como una matriz Numpy con etiquetas Es una matriz de números, con un rango de valores de 0 a 9. La imagen y la etiqueta corresponden uno a uno.

train_images.shape #(60000, 28, 28)
len(train_labels) #60000
test_images.shape #(10000, 28, 28)
len(test_labels) #10000

A través del código anterior, puede ver que el conjunto de entrenamiento contiene 60,000 imágenes y el tamaño es 28x28.
2. Arquitectura de red

from keras import models
from keras import layers

network = models.Sequential() #创建神经网络模型
network.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
network.add(layers.Dense(10, activation='softmax'))

Denso en el código anterior representa la capa completamente conectada de la red neuronal . La primera capa tiene 512 neuronas, la función de activación es relu y la segunda capa es una capa softmax de 10 canales. Normalmente, el tamaño de salida de la última capa es el número total de categorías de datos. Por ejemplo: el conjunto de dígitos escritos a mano (0-9) en este artículo tiene 10 categorías.
3. Pasos de compilación

network.compile(optimizer = 'rmsprop',
               loss = 'categorical_crossentropy',
               metrics = ['accuracy'])

Optimeizer significa optimizador : este artículo usa el optimizador rmsprop; la
pérdida es la función de pérdida : este artículo usa la función de pérdida de entropía cruzada comúnmente utilizada; la
métrica es el indicador de monitoreo : por ejemplo, este artículo solo se preocupa por la precisión.
4. Preparación de los datos de la imagen
Antes de comenzar el entrenamiento, primero procese previamente los datos, convierta los datos en una matriz float32, la forma es (60000, 28 * 28) y el rango de valores es 0 ~ 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

5. Prepara la etiqueta

from keras.utils import to_categorical

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels

6. El modelo de formación
se lleva a cabo llamando a los datos sobre el método de entrenamiento ajuste apropiado (ajuste) Modelo

network.fit(train_images, train_labels, epochs = 50, batch_size = 128)

Epochs representa 50 rondas de entrenamiento, que se pueden configurar de acuerdo con el rendimiento de su propia máquina.
batch_size representa el número de muestras en cada ronda de entrenamiento, como 128 en este artículo, es decir, 128 muestras por entrenamiento.

7. Precisión del modelo

test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)

Si solo se utiliza la precisión del conjunto de entrenamiento como resultado de la evaluación del rendimiento del modelo, se puede producir un ajuste excesivo. Generalmente, el aprendizaje profundo dejará una parte del conjunto de datos como un conjunto de prueba para evaluar el rendimiento de clasificación del modelo.

Tres, el código

Lista de códigos general

from keras.datasets import mnist
from keras import models
from keras import layers
from keras.utils import to_categorical

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
network.add(layers.Dense(10, activation='softmax'))

network.compile(optimizer = 'rmsprop',
               loss = 'categorical_crossentropy',
               metrics = ['accuracy'])

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


train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

network.fit(train_images, train_labels, epochs = 50, batch_size = 128)
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)

Supongo que te gusta

Origin blog.csdn.net/qq_40076022/article/details/108984897
Recomendado
Clasificación