Нормализация экземпляров в coreml - PullRequest
0 голосов
/ 10 марта 2020

Я хочу использовать Instance Normalization в преобразованной модели (от Keras до CoreML).

Keras contrib Нормализация экземпляра рассматривается как пользовательский слой в coreML. Поэтому я скопировал пользовательский слой следующим образом.


    def create_instance_normalization_spec(layer):

       input_name = layer._inbound_nodes[0].inbound_layers[0].name
       input_name += '_output'
       output_name = layer.name + '_output'


       spec_layer = NeuralNetwork_pb2.NeuralNetworkLayer()
       spec_layer.name = layer.name
       spec_layer.input.append(input_name)
       spec_layer.output.append(output_name)


       spec_layer_params = spec_layer.batchnorm


       weights = layer.get_weights()
       channels = weights[0].shape[0]

       idx = 0
       gamma, beta = None, None
       if layer.scale:
           gamma = weights[idx]
           idx += 1
       if layer.center:
           beta = weights[idx]
           idx += 1

       epsilon = layer.epsilon or 1e-5

       spec_layer_params.channels = channels
       spec_layer_params.gamma.floatValue.extend(map(float, 
gamma.flatten()))
       spec_layer_params.beta.floatValue.extend(map(float, 
beta.flatten()))
       spec_layer_params.epsilon = epsilon
       spec_layer_params.computeMeanVar = True
       spec_layer_params.instanceNormalization = True
instance_norm_spec = 
create_instance_normalization_spec(keras_model.layers[-1])
instance_norm_spec.input[:] = ["input1"]
instance_norm_spec.output[:] = ["output1"]
mlmodel._spec.neuralNetwork.layers[-1].CopyFrom(instance_norm_spec)

Теперь эта модель coreML может предсказать. Но выходные данные неверны. Путь выше неправильный? Как я могу это исправить?

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