J'ai un modèle keras avec plusieurs (8) neurones de sortie, qui passent tous par une fonction d'activation softmax. Mon ensemble de données, qui comprend environ 300 000 points de données, est toutefois largement rempli de données pour lesquelles le fait d'avoir le premier neurone de sortie à 1 et tous les autres à 0 permet au réseau neuronal d'obtenir une précision élevée. Lorsque j'adapte mon modèle à l'ensemble de données, je reste bloqué à une perte de 0,3 (en utilisant l'erreur quadratique moyenne) et je me retrouve avec un mauvais réseau neuronal, qui ne fonctionne pas bien sur les nouvelles données.
Je voudrais pondérer l'erreur de chaque neurone de façon très élevée, sauf pour celui qui permet au réseau d'obtenir une grande précision. En python/pseudo code, cela ressemblerait à ce qui suit, où y_true
y y_pred
peuvent être des listes ou des tableaux numpy :
def some_error_function(...):
# something like mean_squared_error()
def weighted_loss(y_true, y_pred):
# Regular loss value for the first output neuron
loss = some_error_function(y_true[0], y_pred[0])
# Loss multiplied by 100 for the other output neurons
loss += some_error_function(y_true[1:], y_pred[1:]) * 100
Juste pour clarifier, some_error_function(...)
peuvent prendre des valeurs individuelles en tant que paramètres ou listes, ainsi y_pred[1:]
signifie passer une liste ou un tableau numpy de toutes les valeurs sauf la première.
Lors de la compilation de mon modèle, comment pourrais-je remplacer ma fonction de perte actuelle par une fonction de perte pondérée comme celle ci-dessus ?
model.compile(optimizer=keras.optimizers.Adam(), loss=<current loss function>)
J'ai essayé de passer une fonction comme weighted_loss
mais je n'étais pas sûr de pouvoir calculer une perte avec les données suivantes y_true
y y_true
car ils sont du type <class 'tensorflow.python.framework.ops.Tensor'>
.
De plus, je ne sais pas exactement ce que je dois rendre. Lorsque j'ai renvoyé 0.0 comme test, j'ai reçu l'erreur suivante :
ValueError: No gradients provided for any variable: ['sequential/dense/kernel:0', 'sequential/dense/bias:0', 'sequential/dense_1/kernel:0', 'sequential/dense_1/bias:0', 'sequential/dense_2/kernel:0', 'sequential/dense_2/bias:0', 'sequential/dense_3/kernel:0', 'sequential/dense_3/bias:0'].