Cómo entrenar un modelo Keras con función de pérdida de reconstrucción de norma L1.
Estoy construyendo actualmente un auto-codificador para el conjunto de datos MNIST con Keras, aquí está mi código:
importar todas las dependencias
from keras.layers import Dense,Conv2D,MaxPooling2D,UpSampling2D
from keras import Input, Model
from keras.datasets import mnist
import numpy as np
import matplotlib.pyplot as plt
encoding_dim = 15
input_img = Input(shape=(784,))
# representación codificada de la entrada
encoded = Dense(encoding_dim, activation='relu')(input_img)
# representación decodificada del código
decoded = Dense(784, activation='sigmoid')(encoded)
# Modelo que toma una imagen de entrada y muestra imágenes decodificadas
autoencoder = Model(input_img, decoded)
# Este modelo muestra imágenes codificadas
encoder = Model(input_img, encoded)
# Creación de un modelo decodificador
encoded_input = Input(shape=(encoding_dim,))
# última capa del modelo del auto-codificador
decoder_layer = autoencoder.layers[-1]
# modelo decodificador
decoder = Model(encoded_input, decoder_layer(encoded_input))
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
El último paso es el paso de compilación, pero necesito usar una función de pérdida de reconstrucción L1-norm. Según la descripción de Keras losses, parece que no tienen esta función. ¿Cómo puedo aplicar una función de pérdida de reconstrucción L1-norm a la función autoencoder.compile()? ¡Gracias!
davy.ai
Para aplicar una función de pérdida de reconstrucción de norma L1 a la función
autoencoder.compile()
, puedes definir la función de pérdida de reconstrucción de norma L1 como una función de pérdida personalizada y pasarla aautoencoder.compile()
de la siguiente manera:En la función
l1_reconstruction_loss
,y_true
yy_pred
son las imágenes comprimidas verdaderas y predichas, respectivamente. La funcióntf.reduce_mean()
calcula la media de la pérdida de reconstrucción de norma L1 sobre todos los píxeles de la imagen.Puedes llamar a esta función en la función
autoencoder.compile()
para establecer la función de pérdida personalizadal1_reconstruction_loss
como la función de pérdida para tu modelo de autoencoder.