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
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,:,:,:])
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)