L'entropie croisée catégorique fonctionne mal avec les fonctionnalités encodées à chaud
Je ne suis pas aux prises avec un problème de catégorical_crossentropy avec des données d'encodage à chaud. Le problème est dans la sortie inchangée du code présenté ci-dessous:
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
Quelques mots sur les données: 1190 fonctionnalités ( 10 fonctionnalités réelles avec 119 catégories). Les entrées sont des lignes de trame de données avec 1190 valeurs par échantillon. La sortie est une valeur binaire 0 ou 1.
Tentatives effectuées avant: binary_crossentropy utilisé avec des résultats satisfaisants, cependant, le nombre d'échantillons n'est pas suffisant pour obtenir de bons résultats sur les données de validation. J'ai essayé d'utiliser différentes activations et tailles de calque.
La question principale est de savoir pourquoi categorical_crossentropy ne fonctionne pas et comment l'utiliser correctement.
En outre, une préoccupation apparaît au sujet de la représentation des données: est-ce la bonne façon de l'utiliser dans une rare rangée de données simples encodées à chaud?
Réponses
Pour que ça marche -
- Changer le nombre de neurones de sortie à 02
- Activation de la sortie vers Softmax
- Conservez tous les vecteurs de sortie OHE
C'est ainsi que Keras est conçu en interne. La même chose a été écrite sur la page de documentation officielle
Classe BinaryCrossentropy
Utilisez cette perte d'entropie croisée lorsqu'il n'y a que deux classes d'étiquettes (supposées être 0 et 1). Pour chaque exemple, il doit y avoir une seule valeur à virgule flottante par prédiction. Dans l'extrait ci-dessous, chacun des quatre exemples n'a qu'une seule valeur à pointage flottant, et y_pred et y_true ont la forme [batch_size]
CatégoricalCrossentropy class
La forme de y_pred et de y_true est [batch_size, num_classes]
Et nous savons que pour conserver la classification multi-classes, vous devez rendre toutes les sorties num_class les unes par rapport aux autres, nous utilisons donc softmax
Ref
page officielle Keras
Fil
SE similaire Fil SE similaire