Я пытаюсь использовать слои исключения в моей модели во время вывода для измерения неопределенности модели, как описано в метод, описанный Юрином Галом
Решение описано в этом сообщении: Как рассчитать неопределенность прогноза с помощью Keras?, который определяет новую функцию Keras self.f = K.function([self.graph.layers[0].input, K.learning_phase()], [self.graph.layers[-1].output])
Однако этот метод не работает, если используемая модель имеет уровни пакетной нормализации. Так как это заставит модель не использовать среднее значение и дисперсию, полученные во время обучения, а установить новые в зависимости от текущего пакета.
Следовательно, я ищу способ установить для параметра обучения пакетных слоев значение false, но оставить слой исключения в режиме обучения?
Я использую Keras effectiveNet B0 в качестве модели, обученной на пользовательских данных keras_efficientNet
Я уже пробовал сам менять настройки слоев
`
for layer in self.graph.layers[4].layers:
if 'batch_norm' in layer.name:
layer._trainable = False
layer._inbound_nodes[0].output_tensors[0]._uses_learning_phase = False
layer._inbound_nodes[0].input_tensors[0]._uses_learning_phase = False
if 'dropout' in layer.name:
layer._inbound_nodes[0].output_tensors[0]._uses_learning_phase = True
for weight in self.graph.layers[4].weights:
if 'batch_norm' in weight.name:
weight._trainable = False`
Тем не менее, ничего из этого не сработало.