Благодаря этой замечательной статье (http://machinethink.net/blog/coreml-custom-layers/), я понял, как написать преобразование с помощью coremltools и Lambda с пользовательским слоем Keras. Но, я не могу понять по ситуации, функция с двумя параметрами.
#python
def scaling(x, scale):
return x * scale
Слой Keras здесь.
#python
up = conv2d_bn(mixed,
K.int_shape(x)[channel_axis],
1,
activation=None,
use_bias=True,
name=name_fmt('Conv2d_1x1'))
x = Lambda(scaling, # HERE !!
output_shape=K.int_shape(up)[1:],
arguments={'scale': scale})(up)
x = add([x, up])
В этой ситуации, как я могу написать func evaluate(inputs: [MLMultiArray], outputs: [MLMultiArray])
в custom MLCustomLayer class
на Swift? Я понимаю только в ситуации с функцией одного параметра, например,
#swift
func evaluate(inputs: [MLMultiArray], outputs: [MLMultiArray]) throws {
for i in 0..<inputs.count {
let input = inputs[i]
let output = outputs[i]
for j in 0..<input.count {
let x = input[j].floatValue
let y = x / (1 + exp(-x))
output[j] = NSNumber(value: y)
}
}
}
Как насчет функции с двумя параметрами, например x * scale
?
Полный код здесь.
- Преобразование в модель Core ML с пользовательским уровнем https://github.com/osmszk/dla_team14/blob/master/facenet/coreml/CoremlTest.ipynb
- Сетевая модель Кераса https://github.com/osmszk/dla_team14/blob/master/facenet/code/facenet_keras_v2.py
Спасибо.