Утеря индивидуальной дистилляции знаний - PullRequest
0 голосов
/ 09 июля 2020

Я хочу реализовать потерю дистилляции знаний, используя две модели в Keras. Модели идентичны, но одна из них прошла обучение (учитель). Я нашел эту реализацию на net:

def knowledge_distillation_loss(y_true, y_pred, lambda_const):
    temperature = 5.0    
    # split in 
    # onehot hard true targets

    #y_true, logits = y_true[:, :number of classes], y_true[:, number of classes:]

    y_true, logits = y_true[:, :10], y_true[:, 10:]

    # convert logits to soft targets
    #y_soft = backend.softmax(logits/temperature)
    y_soft = backend.softmax(logits/temperature)

    # split in 
    # usual output probabilities
    # probabilities made softer with temperature
    y_pred, y_pred_soft = y_pred[:, :10], y_pred[:, 10:]    
    return lambda_const*backend.sparse_categorical_crossentropy(y_true, y_pred) + backend.categorical_crossentropy(y_soft, y_pred_soft)

lambda_const = 3

model1.compile(loss= lambda y_true, y_pred: knowledge_distillation_loss(y_true, y_pred,lambda_const), optimizer= keras.optimizers.Adam(), metrics=['accuracy'])
model1.fit(x= train_images, y= train_labels,epochs=10)

У меня есть несколько вопросов об этой реализации: 1- Где мягкие вероятности учителя? 2- Согласно дистилляции знаний, ученик должен быть обучен, используя кросс-энтропию между обычными вероятностями softmax и истинными метками в дополнение к смягченным вероятностям ученика и учителя. Я не могу понять этого в этой реализации.

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...