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.
- ¿Cuál es la diferencia de aprender características latentes usando SVD y usando vectores incrustados en una red profunda?
- ¿Cuándo es importante utilizar convoluciones cruzadas de canales y cuándo no?
- En finanzas cuantitativas, ¿hay alguna analogía entre la optimización de la cartera y el análisis de componentes principales?
- Cómo determinar la distribución que sigue un conjunto de datos
- ¿Cómo se implementa la funcionalidad de verificación de spam mediante el aprendizaje automático?
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))