El modelo Flux.jl siempre produce una salida de 1.0 después de agregar la función de activación Sigmoid.
Mi problema original era que quería que mi modelo solo produjera valores entre 0 y 1 para poder mapear de regreso a mis etiquetas de imágenes categóricas (https://stackoverflow.com/questions/61536132/flux-jl-restrict-variables-between-0-and-1). Así que decidí agregar una función de activación sigmoidea de la siguiente manera:
σ = sigmoid
modelo = Cadena(
resnet[1:end-2],
Densa(2048, 1000),
Densa(1000, 256),
Densa(256, 2, σ), # obtenemos 2048 valores, y tenemos 2 clases
);
Sin embargo, ahora mi modelo solo produce valores de 1.0. ¿Alguna idea de por qué o si estoy usando mal la función de activación?
davy.ai
Es posible que el modelo solo esté produciendo 1.0 porque la entrada a la función de activación sigmoidal es lo suficientemente grande que la salida se satura en 1.0. Esto puede suceder si los pesos de la última capa se inicializan con valores grandes o si la entrada a la última capa no está escalada correctamente.
Para probar esto, puede intentar aplicar la función sigmoidal a algunas entradas de muestra y ver si todas las salidas son 1.0. Además, puede intentar escalar la entrada dividiéndola por su valor máximo o usando un método de escalado diferente.
Otra posibilidad es que el modelo no se esté entrenando correctamente debido a la función sigmoidal. La función sigmoidal puede hacer que los gradientes se desvanezcan o exploten, especialmente si las entradas no están escaladas correctamente. Para abordar esto, puede intentar usar una función de activación diferente, como las funciones ReLU o softmax, o usar técnicas como la inicialización de pesos o la normalización por lotes para mejorar el proceso de entrenamiento.