Caso de red neuronal convolucional: Reconocimiento de fuentes chinas - Lishu y Xingkai

1. Estructura de la red AlexNet
1.1 Introducción a AlexNet:
fue diseñado en 2012 por Hinton, el ganador de la competencia ImageNet, y su alumno Krizhevsky Alex.
El primer participante en la competencia ImageNet en usar una red neuronal convolucional.
1.2 Estructura de la red AlexNet: 8 capas
Capa de convolución Capa
de agrupación Capa
de convolución
Capa de agrupación
Capa de convolución
Capa
de convolución Capa de convolución
Capa de agrupación Capa de salida : tres
capas completamente conectadas Función de activación; use Dropout para ignorar aleatoriamente algunas neuronas para evitar el sobreajuste del modelo; use la agrupación máxima superpuesta en CNN (tamaño de paso más pequeño que el núcleo de convolución); propuesta de normalización de respuesta local (LRN), fue reemplazada gradualmente por BN (normalización por lotes); uso de CUDA para acelerar el entrenamiento de redes neuronales, usando el poderoso poder de cómputo de GPU; usando tecnología de aumento de datos para aumentar el tamaño de la muestra. 2. Caso: Reconocimiento de fuentes chinas - Lishu y Xingkai 2.1 Preparación de datos 2.2 Construir generador de datos (1) Generador de datos
inserte la descripción de la imagen aquí









inserte la descripción de la imagen aquí

from keras.preprocessing.image import ImageDataGenerator

IMSIZE=227

validation_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(
    './data/ChineseStyle/test/',
    target_size=(IMSIZE, IMSIZE),
    batch_size=200,
    class_mode='categorical')

train_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(
    './data/ChineseStyle/train',
    target_size=(IMSIZE, IMSIZE),
    batch_size=200,
    class_mode='categorical')

(2) imagen de salida

from matplotlib import pyplot as plt

plt.figure()
fig,ax = plt.subplots(2,5)
fig.set_figheight(7)
fig.set_figwidth(15)
ax=ax.flatten()
X,Y=next(validation_generator)
for i in range(10): ax[i].imshow(X[i,:,:,:])

inserte la descripción de la imagen aquí

2.3 Implementación del código AlexNet

from keras.layers import Activation,Conv2D, BatchNormalization, Dense
from keras.layers import Dropout, Flatten, Input, MaxPooling2D, ZeroPadding2D
from keras import Model

IMSIZE = 227
input_layer = Input([IMSIZE,IMSIZE,3])
x = input_layer
x = Conv2D(96,[11,11],strides = [4,4], activation = 'relu')(x) 
x = MaxPooling2D([3,3], strides = [2,2])(x)    
x = Conv2D(256,[5,5],padding = "same", activation = 'relu')(x)
x = MaxPooling2D([3,3], strides = [2,2])(x)
x = Conv2D(384,[3,3],padding = "same", activation = 'relu')(x) 
x = Conv2D(384,[3,3],padding = "same", activation = 'relu')(x) 
x = Conv2D(256,[3,3],padding = "same", activation = 'relu')(x) 
x = MaxPooling2D([3,3], strides = [2,2])(x)
x = Flatten()(x)   
x = Dense(4096,activation = 'relu')(x)
x = Dropout(0.5)(x)
x = Dense(4096,activation = 'relu')(x)
x = Dropout(0.5)(x)
x = Dense(2,activation = 'softmax')(x) 
output_layer=x
model=Model(input_layer,output_layer)
model.summary()

2.4 Compilar y ejecutar AlexNet

from keras.optimizers import Adam
model.compile(loss='categorical_crossentropy',optimizer=Adam(lr=0.001),metrics=['accuracy'])
model.fit_generator(train_generator,epochs=20,validation_data=validation_generator)

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_31391601/article/details/115049033
Recomendado
Clasificación