Keras usando Keras para construir la red neuronal recurrente de clasificación RNN

1. Introducción

Esta vez usamos redes neuronales recurrentes (RNN, redes neuronales recurrentes) para la clasificación, usando el conjunto de datos MNIST, principalmente usando la capa SimpleRNN.

2. Use Keras para construir una red neuronal recurrente RNN

2.1 Importar módulos necesarios

import numpy as np
from keras.datasets import mnist    #手写体数据集模块
from keras.utils import np_utils
from keras.models import Sequential   #构建网络必需模块  
from keras.layers import SimpleRNN, Activation, Dense    #RNN、激活函数、全连接层模块
from keras.optimizers import Adam   #优化器模块
np.random.seed(42)   #随机数种子

2.2. Configuración de hiperparámetro

La resolución de la imagen en MNIST es 28 × 28. Para usar RNN, entendemos la imagen como datos serializados. Cada línea sirve como una unidad de entrada, por lo que el tamaño de los datos de entrada es INPUT_SIZE = 28; primero, se ingresa la primera línea, luego la segunda línea, la tercera línea, la cuarta línea, ..., la entrada de la línea 28, esta es una imagen, que es una Secuencia, entonces paso TIME_STEPS = 28.

TIME_STEPS = 28     #可理解为每张图片的行数
INPUT_SIZE = 28     #可理解为每张图片的列数
BATCH_SIZE = 50     #批量大小
BATCH_INDEX = 0   
OUTPUT_SIZE = 10    #输出维度大小
CELL_SIZE = 50      #经过RNN后的输出大小
LR = 0.001

2.3. Preprocesamiento de datos

Los datos de entrenamiento deben normalizarse. Debido a que los datos originales son una imagen en escala de grises de 8 bits, deben dividirse entre 255.

(X_train, y_train),(X_test, y_test) = mnist.load_data()     #拆分训练集与测试集

X_train = X_train.reshape(-1,28,28)/255    #满足输入RNN为(-1,28,28)
X_test = X_test.reshape(-1,28,28)/255
y_train = np_utils.to_categorical(y_train,num_classes=10)    #将类别向量转换为二进制(只有0和1)的矩阵类型表示
y_test = np_utils.to_categorical(y_test,num_classes=10)

2.4 Construir un modelo

Primero agregue la capa RNN, la entrada son datos de entrenamiento y el tamaño de los datos de salida está definido por CELL_SIZE.

Luego agregue la capa de salida y seleccione softmax como la función de excitación

model = Sequential()
model.add(SimpleRNN(
    batch_input_shape = (None,TIME_STEPS,INPUT_SIZE),
    output_dim = CELL_SIZE,
    unroll = True
))

model.add(Dense(OUTPUT_SIZE))
model.add(Activation('softmax'))

2.5. Activar el modelo

Después de configurar el método de optimización, puede comenzar a entrenar después de la función de pérdida y el método de métricas. Cada entrenamiento no toma todos los datos, solo toma secuencias BATCH_SIZE o imágenes BATCH_SIZE, lo que puede reducir en gran medida el tiempo de cálculo y mejorar la eficiencia del entrenamiento.

adam = Adam(LR)
model.compile(optimizer=adam,
              loss = 'categorical_crossentropy',
              metrics=['accuracy'])

2.6 Entrenamiento + prueba

for step in range(10001):
  X_batch = X_train[BATCH_INDEX:BATCH_INDEX+BATCH_SIZE,:,:]
  y_batch = y_train[BATCH_INDEX:BATCH_INDEX+BATCH_SIZE,:]
  cost = model.train_on_batch(X_batch,y_batch)
  BATCH_INDEX += BATCH_SIZE
  BATCH_INDEX = 0 if BATCH_INDEX >= X_train.shape[0] else BATCH_INDEX
  if step % 500 == 0:
    cost, accuracy = model.evaluate(X_test, y_test, batch_size=y_test.shape[0],verbose=False)
    print('test cost:',cost,'test accuracy:',accuracy)

Inserte la descripción de la imagen aquí

233 artículos originales publicados · elogiados 645 · 30,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/weixin_37763870/article/details/105601604
Recomendado
Clasificación