Si uno está tratando de construir un codificador automático para el conjunto de datos MNIST, ¿debería normalizar los datos sin procesar?

Gracias por el A2A.

Sí, debe normalizar los datos de funciones para el entrenamiento. Sin embargo, en su enfoque, terminará con un conjunto de números en el rango (-infinito, + infinito) (99% de los cuales están en el rango (-3 * std, + 3 * std)). En general, es preferible escalar su entrada al rango (0, 1), por lo que la estrategia sugerida por Oliver Eberle de dividir la entrada por el valor máximo 255 podría ser preferible. Este rango le ofrece más opciones de funciones de pérdida.

Además, dado que su modelo está entrenado en datos normalizados (escalados o centrados + escalados), debe normalizar los datos de prueba de la misma manera.

Decidí probar esto experimentalmente usando el siguiente código (adaptado de Building Autoencoders en la publicación de blog de Keras), probando diferentes técnicas de normalización contra los datos de MNIST con un simple codificador automático de 2 capas y evaluándolo a través de la pérdida en el modelo entrenado contra El conjunto de validación.

Inicialmente intenté con binary_crossentropy como la función de pérdida y sigmoide como la activación en la capa del decodificador y obtuve una pérdida de 0.1093 usando el enfoque de escala. Con su enfoque de centrado + escala, obtengo pérdidas negativas, así que cambié a usar mean_squared_error como la función de pérdida y tanh en la capa del decodificador (para tener en cuenta el cambio en el rango). Usando esto, obtuve 0.030 con el enfoque de escala y 0.624 con el enfoque de centrado + escala.

# – * – codificación: utf-8 – * –
de __future__ división de importación, función_impresión
from keras.layers import Input, Dense
del modelo de importación keras.models
de sklearn importar conjuntos de datos
de sklearn.cross_validation import train_test_split
importar numpy como np

dataset = datasets.fetch_mldata (“MNIST Original”)

X = dataset.data

## para escalar
X = X / 255.0

## para centrar y escalar
#Xmean = np.mean (X)
#Xstd = np.std (X)
#X = (X – Xmean) / Xstd

Xtrain, Xtest = train_test_split (X, test_size = 0.33)

INPUT_DIMENSION = dataset.data.shape [1]
CODIFICACIÓN_DIMENSIÓN = 32

señal = Entrada (forma = (INPUT_DIMENSION,))
codificado = Denso (ENCODING_DIMENSION, activación = “relu”) (señal)
## para escalar
#decoded = Denso (INPUT_DIMENSION, activación = “sigmoide”) (codificado)
## para centrar + escalar
decodificado = Denso (INPUT_DIMENSION, activación = “tanh”) (codificado)

autoencoder = Modelo (entrada = señal, salida = decodificada)
# para escalar
# autoencoder.compile (optimizer = “adadelta”, loss = “binary_crossentropy”)
# para centrar y escalar
autoencoder.compile (optimizador = “adadelta”, pérdida = “mean_squared_error”)

autoencoder.fit (Xtrain, Xtrain, nb_epoch = 50, batch_size = 256,
shuffle = True, validation_data = (Xtest, Xtest))

score = autoencoder.evaluate (Xtest, Xtest, verbose = 0)
print (“Pérdida:% .3f”% (puntaje))

Puede leer los siguientes hilos para obtener más información:

  • Uso de valores de entrada grandes con codificadores automáticos
  • ¿Es necesario normalizar los datos nuevamente después de extraer los datos del Autoencoder?
  • Preprocesamiento de datos

Escalar a un rango entre 0 y 1 es una buena idea, por ejemplo, en el ejemplo del codificador automático caffe MNIST simplemente multiplica por 1/256 = 0.00390625 para lograr esto.

capa {nombre: “mnist”
tipo: “Datos” transform_param {
escala: 0.00390625}
data_param {
fuente: “mnist_train_lmdb”
backend: LMDB
batch_size: 64}
arriba: “datos” arriba: “etiqueta”
}

More Interesting

¿En qué se diferencia el estado oculto (h) de la memoria (c) en una celda LSTM?

¿La retropropagación de red neuronal de convolución utiliza un algoritmo en línea o un algoritmo por lotes?

¿Puede el aprendizaje automático ayudar en la detección de malware? ¿Cuáles son los cuellos de botella en tal implementación de ML?

¿Qué es la traducción automática estadística?

¿Cuáles son los conjuntos de datos de visión por computadora más populares en este momento?

¿Cómo difiere un sistema de clasificación artificial de una clasificación de sistema natural?

¿Hay algún trabajo interesante en la clasificación utilizando la regresión logística bayesiana?

Procesamiento del lenguaje natural: ¿Cuáles son algunos métodos efectivos para detectar / calificar cadenas que pueden contener palabras profanas / ofensivas?

¿Cuál es la diferencia entre el entrenamiento por lotes, en línea y mini-lote en redes neuronales? ¿Cuál debo usar para un conjunto de datos de pequeño a mediano tamaño con fines de predicción?

¿Cuáles son los temas sobre big data para hacer una tesis de maestría que excluye el aprendizaje automático?

¿Qué significa el espacio de hipótesis en Machine Learning?

¿Hay bases de datos de palabras clave abiertas?

¿Cuál es la mejor manera para que un principiante completo aprenda el aprendizaje automático?

¿Se está realizando una fuerte investigación en la intersección del aprendizaje automático y la neurociencia computacional?

Serie temporal: ¿Existe un enfoque para la detección de anomalías que no se base en datos de entrenamiento anteriores?