A entropia cruzada categórica funciona de maneira errada com recursos codificados de uma única vez
Estou lutando com o problema categorical_crossentropy com dados de codificação one-hot. O problema está na saída inalterada do código apresentado a seguir:
inputs = keras.Input(shape=(1190,), sparse=True)
lay_1 = layers.Dense(1190, activation='relu')
x = lay_1(inputs)
x = layers.Dense(10, activation='relu')(x)
out = layers.Dense(1, activation='sigmoid')(x)
self.model = keras.Model(inputs, out, name='SimpleD2Dense')
self.model.compile(
optimizer=keras.optimizers.Adam(),
loss=tf.losses.categorical_crossentropy,
metrics=['accuracy']
)
Epoch 1/3
1572/1572 - 6s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Epoch 2/3
1572/1572 - 6s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Epoch 3/3
1572/1572 - 7s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Poucas palavras sobre dados: 1190 recursos ( 10 recursos reais com 119 categorias). As entradas são linhas de dataframe com 1190 valores por amostra. A saída é um valor binário 0 ou 1.
Tentativas feitas antes: binary_crossentropy usado com resultados satisfatórios, porém, o número de amostras não é suficiente para obter bons resultados nos dados de validação. Tentei usar diferentes ativações e tamanhos de camada.
A questão principal é por que categorical_crossentropy não está funcionando e como usá-lo da maneira certa.
Além disso, surge uma preocupação sobre a representação de dados: é a maneira certa de usar em uma linha rara de dados simples codificados one-hot?
Respostas
Para funcionar -
- Altere a contagem de neurônios de saída para 02
- Ativação da saída para Softmax
- Mantenha todos os vetores de saída OHE
É assim que Keras é projetado internamente. O mesmo foi escrito na página de documentação oficial
Classe BinaryCrossentropy
Use essa perda de entropia cruzada quando houver apenas duas classes de rótulo (assumidas como 0 e 1). Para cada exemplo, deve haver um único valor de ponto flutuante por predição. No snippet abaixo, cada um dos quatro exemplos tem apenas um único valor de apontamento flutuante, e y_pred e y_true têm a forma [batch_size]
Classe CategoricalCrossentropy
A forma de y_pred e y_true são [batch_size, num_classes]
E sabemos que para manter a multiclasse de Classificação , você precisa tornar todas as saídas num_class relativas umas às outras, então usamos softmax
Página oficial de Ref Keras
Tópico
SE semelhante Tópico SE semelhante