Criei um modelo LSTM para prever perguntas duplicadas no conjunto de dados oficial do Quora. Os rótulos de teste são 0 ou 1. 1 indica que o par de perguntas está duplicado. Depois de criar o modelo usando model.fit
, eu testo o modelo usando model.predict
os dados de teste. A saída é uma matriz de valores, como abaixo:
[ 0.00514298]
[ 0.15161049]
[ 0.27588326]
[ 0.00236167]
[ 1.80067325]
[ 0.01048524]
[ 1.43425131]
[ 1.99202418]
[ 0.54853892]
[ 0.02514757]
Estou apenas mostrando os 10 primeiros valores da matriz. Não entendo o que esses valores significam e qual é o rótulo previsto para cada par de perguntas?
machine-learning
python
neural-network
keras
lstm
Dookoto_Sea
fonte
fonte
Respostas:
A saída de uma rede neural nunca será, por padrão, binária - ou seja, zeros ou uns. A rede trabalha com valores contínuos (não discretos), a fim de otimizar a perda mais livremente na estrutura de descida gradiente.
Dê uma olhada aqui em uma pergunta semelhante que também mostra algum código.
Sem qualquer tipo de ajuste e dimensionamento, é provável que a saída da sua rede caia em algum lugar no intervalo da sua entrada, em termos de seu valor nominal. No seu caso, isso parece estar entre 0 e 2.
Agora você pode escrever uma função que transforma seus valores acima em 0 ou 1, com base em algum limite. Por exemplo, dimensione os valores para estar no intervalo [0, 1]; se o valor estiver abaixo de 0,5, retorne 0; se acima de 0,5, retorne 1.
fonte
Se este é um problema de classificação, você deve mudar sua rede para ter 2 neurônios de saída.
Você pode converter rótulos em vetores codificados de uma só vez usando
Em seguida, verifique se a camada de saída possui dois neurônios com uma função de ativação softmax.
Isso resultará em
model.predict(x_test_reshaped)
uma lista de listas. Onde a lista interna é a probabilidade de uma instância pertencente a cada classe. Isso somará 1 e, evidentemente, o rótulo decidido deve ser o neurônio de saída com a maior probabilidade.O Keras inclui isso em sua biblioteca, para que você não precise fazer essa comparação. Você pode obter o rótulo da classe diretamente usando
model.predict_classes(x_test_reshaped)
.fonte
As previsões são baseadas no que você alimenta como saídas de treinamento e na função de ativação.
Por exemplo, com entrada de 0 a 1 e uma função de ativação sigmóide para a saída com uma perda de entropia cruzada binária, você obteria a probabilidade de um 1. Dependendo do custo de tomar a decisão errada em qualquer direção, você pode decidir como lide com essas probabilidades (por exemplo, preveja a categoria "1", se a probabilidade for> 0,5 ou talvez já seja> 0,1).
fonte