Zbudowałem model LSTM, aby przewidzieć duplikaty pytań w oficjalnym zbiorze danych Quora. Etykiety testowe mają wartość 0 lub 1. 1 oznacza, że para pytań jest zduplikowana. Po zbudowaniu modelu za pomocą model.fit
, testuję model za pomocą model.predict
danych testowych. Dane wyjściowe to tablica wartości, takich jak poniżej:
[ 0.00514298]
[ 0.15161049]
[ 0.27588326]
[ 0.00236167]
[ 1.80067325]
[ 0.01048524]
[ 1.43425131]
[ 1.99202418]
[ 0.54853892]
[ 0.02514757]
Pokazuję tylko pierwsze 10 wartości w tablicy. Nie rozumiem, co oznaczają te wartości i jaka jest przewidywana etykieta dla każdej pary pytań?
machine-learning
python
neural-network
keras
lstm
Dookoto_Sea
źródło
źródło
Odpowiedzi:
Wyjście sieci neuronowej nigdy domyślnie nie będzie binarne - tzn. Zera lub jedynek. Sieć pracuje z wartościami ciągłymi (nie dyskretnymi), aby bardziej swobodnie optymalizować straty w ramach spadku gradientu.
Spójrz tutaj na podobne pytanie, które pokazuje także trochę kodu.
Bez jakiegokolwiek udoskonalania i skalowania, wydajność sieci prawdopodobnie spadnie gdzieś w zakresie twojego wejścia, pod względem jej wartości nominalnej. W twoim przypadku wydaje się to mniej więcej od 0 do 2.
Możesz teraz napisać funkcję, która zamienia powyższe wartości na 0 lub 1, w oparciu o pewien próg. Na przykład przeskaluj wartości, aby zawierały się w zakresie [0, 1], a następnie, jeśli wartość jest poniżej 0,5, zwróć 0, jeśli powyżej 0,5, zwróć 1.
źródło
Jeśli jest to problem z klasyfikacją, powinieneś zmienić swoją sieć na 2 neurony wyjściowe.
Możesz przekonwertować etykiety na wektory kodowane na gorąco za pomocą
Następnie upewnij się, że twoja warstwa wyjściowa ma dwa neurony z funkcją aktywacji softmax.
Spowoduje to, że
model.predict(x_test_reshaped)
będziesz tablicą list. Gdzie wewnętrzna lista jest prawdopodobieństwem wystąpienia instancji należącej do każdej klasy. Dodaje to do 1 i najwyraźniej zdecydowanym znacznikiem powinien być neuron wyjściowy o najwyższym prawdopodobieństwie.Keras ma to w swojej bibliotece, więc nie musisz robić tego porównania samodzielnie. Możesz uzyskać etykietę klasy bezpośrednio, używając
model.predict_classes(x_test_reshaped)
.źródło
Prognozy są oparte na tym, co podajesz jako wyniki treningu i funkcję aktywacji.
Na przykład przy wejściu 0-1 i sigmoidalnej funkcji aktywacji wyjścia z binarną stratą crossentropii uzyskałbyś prawdopodobieństwo 1. W zależności od kosztu błędnego podjęcia decyzji w obu kierunkach możesz następnie zdecydować, w jaki sposób radzić sobie z tymi prawdopodobieństwami (np. przewidzieć kategorię „1”, jeśli prawdopodobieństwo wynosi> 0,5 lub być może już, gdy jest> 0,1).
źródło