Eksperymentuję trochę autoencoderów, a dzięki tensorflow stworzyłem model, który próbuje zrekonstruować zestaw danych MNIST.
Moja sieć jest bardzo prosta: X, e1, e2, d1, Y, gdzie e1 i e2 są warstwami kodującymi, d2 i Y są warstwami dekodującymi (a Y jest zrekonstruowanym wyjściem).
X ma 784 jednostki, e1 ma 100, e2 ma 50, d1 ma ponownie 100, a Y 784 ponownie.
Używam sigmoidów jako funkcji aktywacyjnych dla warstw e1, e2, d1 i Y. Wejścia są w [0,1], podobnie jak wyjścia.
Cóż, próbowałem użyć entropii krzyżowej jako funkcji straty, ale wyjście zawsze było blobem i zauważyłem, że wagi od X do e1 zawsze będą zbieżne do macierzy o zerowej wartości.
Z drugiej strony, użycie średnich błędów kwadratowych jako funkcji straty, dałoby przyzwoity wynik, a teraz jestem w stanie zrekonstruować dane wejściowe.
Dlaczego to jest takie? Myślałem, że mogę zinterpretować wartości jako prawdopodobieństwa, a zatem użyć entropii krzyżowej, ale oczywiście robię coś złego.