Dank dieses großartige Artikel (http://machinethink.net/blog/coreml-custom-layers/), habe ich verstanden, wie man Konvertierung mit Coremltools und Lambda mit Keras benutzerdefinierte Schicht schreiben. Aber ich kann nicht auf die Situation verstehen, Funktion mit zwei Parametern.Benutzerdefinierte Schicht mit zwei Parametern Funktion auf Core ML
#python
def scaling(x, scale):
return x * scale
Keras-Schicht ist hier.
#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])
Auf dieser Situation, wie kann ich schreiben func evaluate(inputs: [MLMultiArray], outputs: [MLMultiArray])
in custom MLCustomLayer class
auf Swift? Ich verstehe nur in einer Parameterfunktion Situation wie dieser,
#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)
}
}
}
Wie über zwei Parameter Funktion, wie x * scale
?
Der vollständige Code ist hier.
- Umstellung auf Core-ML-Modell mit benutzerdefinierter Schicht https://github.com/osmszk/dla_team14/blob/master/facenet/coreml/CoremlTest.ipynb
- Netzwerk-Modell von Keras https://github.com/osmszk/dla_team14/blob/master/facenet/code/facenet_keras_v2.py
Danke.
Oh! Ich danke dir sehr. Ich bin so grad, dass du kommentiert hast. – osmszk
Ja, Sie haben Recht. Die "Skala" ist ein Hyperparameter. Dank Ihres fruchtbaren Blogposts und Ihres Codes konnte ich dieses Problem lösen! – osmszk
Vielen Dank soooo viel! – osmszk