Я хочу реализовать потерю дистилляции знаний, используя две модели в 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 и истинными метками в дополнение к смягченным вероятностям ученика и учителя. Я не могу понять этого в этой реализации.
Любая помощь приветствуется.