Construir CNN con keras de Python
data.py: #coding: utf-8
"""
Autor: wepon
Fuente: código n.py Ajuste de la siguiente manera: #coding: utf-8
'''
GPU?run? Comando:
THEANO_FLAGS=mode=FAST_RUN, dispositivo=gpu, floatX =float32?python?cnn.py
CPU?Comando:
python?cnn.py
'''
# Importar varios componentes del módulo utilizados
desde?__future__?import?absolute_import
desde?__future__?import?print_function
desde?keras.preprocessing.image?import ? ImageDataGenerator
de?keras.models?import?Sequential
de?keras.layer.core?import?Denso, Abandono, Activación, Aplanado
de ? keras.layer.advanced_activations?import?PReLU
de?keras.layer.convolutional?import?Convolution2D,?MaxPooling2D
de?keras.optimizers?import?SGD, Adadelta, Adagrad
de?keras.utils?import?np_ utils, generic_utils
de?six.moves?import?range
de?data?import?load_data
importar?aleatorio
#load_data
datos ,?label?=?load_data()
#disrupt datos
index?=?[i? para?matrix, llame directamente a esta función proporcionada por keras después de la conversión
label?=?np_utils.to_categorical(label,?10)
# ##############
# Comience a construir el modelo CNN
###############< / p>
#Generar modelo
modelo?=?Sequential()
#La primera capa convolucional. 4 núcleos de convolución, cada tamaño de núcleo de convolución es 5 * 5. 1 representa el canal de la imagen de entrada y la imagen en escala de grises es 1 canal.
#border_mode puede ser válido o completo; consulte aquí para obtener más detalles: La pérdida de parámetros en el montón es la función de pérdida (función objetivo)
SGD?=?SGD(l2=0.0 , lr =0.05,?decent=1e-6,?momentum=0.9,?nesterov=True)
model.compile(loss='categorical_crossentropy',?optimizer=sgd, class_mode="categorical")
p># Llamar al método de adaptación es un proceso de entrenamiento. El número de épocas de entrenamiento se establece en 10 y el tamaño del lote es 100.
#Los datos se mezclan aleatoriamente shuffle=True. detallado = 1, el resultado del proceso de entrenamiento, 0, 1 y 2 se pueden usar de cualquier manera, no importa. show_accuracy=True, el resultado del proceso de entrenamiento para cada época es la precisión.
#Llame al método de adaptación, que es un proceso de entrenamiento.
#validation_split=0.2, utilice 20 datos como conjunto de validación.
model.fit(data,?label,?batch_size=100,?nb_epoch=10,shuffle=True,verbose=1,show_accuracy=True,validation_split=0.2)
" """
#Métodos para usar data?augmentation
#Algunos parámetros y métodos para llamar, ver documentación
datagen?=?ImageDataGenerator(
featurewise_center=True,?#establece la media de entrada en 0 sobre el conjunto de datos
samplewise_center=False,?#establece la media de cada muestra en 0
featurewise_std_normalization=True,?# ?divide?inputs?by?std?of?dataaset
samplewise_std_normalization=False,?#?divide?each?inputs?by?its?std?
zca_whitening=False,? #Aplicar blanqueamiento ZCA
rotation_range=20,?#Girar aleatoriamente la imagen de 0 a 180 grados
width_shift_range=0.2,?#Desplazar aleatoriamente la imagen horizontalmente (una fracción del total width )
height_shift_range=0.2,?#Mueve aleatoriamente la imagen verticalmente (parte de la altura total)
horizontal_flip=True,?#Voltea aleatoriamente la imagen
vertical_flip=Falso)? #Voltear imágenes aleatoriamente
#?Calcular la cantidad necesaria para la normalización de características
#?(componentes estándar, medio y principal si se aplica el blanqueamiento ZCA)
datagen.fit(datos)
for?e?in?range(nb_epoch):
print('-'*40)
print( 'Época ',?e)
print('-'*40)
print("Entrenamiento...")
#?=?generic_utils .Progbar (data.shape[0])
para?X_batch,?Y_ lote?in?datagen.flow(data,?label):
pérdida, precisión?=? train(X_batch,?Y_batch,accuracy=True)
progbar.add(X_batch.shape[0],?values=[("train?loss",?loss),("accuracy: ", ?precisión)]?)
progbar?
""""