Kann ich mit Caffe eine neue Schicht (für einen anderen Verlust) hinzufügen? Wie kann ich es mit Matlab oder Python tun?Ist es möglich, neue Schichten zu Caffe hinzuzufügen?
1
A
Antwort
2
Ja, Sie können eine benutzerdefinierte Verlustfunktion mit Pycaffe hinzufügen. Hier ist ein Beispiel für die Euklidische Verlustschicht in Python (aus Caffe Github repo). Sie müssen die Verlustfunktion in Vorwärts-Funktion zur Verfügung zu stellen und es ist Steigung in Rückwärtsmethode:
import caffe
import numpy as np
class EuclideanLossLayer(caffe.Layer):
"""
Compute the Euclidean Loss in the same manner as the C++ EuclideanLossLayer
to demonstrate the class interface for developing layers in Python.
"""
def setup(self, bottom, top):
# check input pair
if len(bottom) != 2:
raise Exception("Need two inputs to compute distance.")
def reshape(self, bottom, top):
# check input dimensions match
if bottom[0].count != bottom[1].count:
raise Exception("Inputs must have the same dimension.")
# difference is shape of inputs
self.diff = np.zeros_like(bottom[0].data, dtype=np.float32)
# loss output is scalar
top[0].reshape(1)
def forward(self, bottom, top):
self.diff[...] = bottom[0].data - bottom[1].data
top[0].data[...] = np.sum(self.diff**2)/bottom[0].num/2.
def backward(self, top, propagate_down, bottom):
for i in range(2):
if not propagate_down[i]:
continue
if i == 0:
sign = 1
else:
sign = -1
bottom[i].diff[...] = sign * self.diff/bottom[i].num
speichert es als pyloss.py zum Beispiel. Anschließend können Sie die Python-Ebene in der prototxt Datei, um sie zu laden verwenden:
layer {
type: 'Python'
name: 'loss'
top: 'loss'
bottom: 'ipx'
bottom: 'ipy'
python_param {
# the module name -- usually the filename -- that needs to be in $PYTHONPATH
module: 'pyloss'
# the layer name -- the class name in the module
layer: 'EuclideanLossLayer'
}
# set loss weight so Caffe knows this is a loss layer.
# since PythonLayer inherits directly from Layer, this isn't automatically
# known to Caffe
loss_weight: 1
}
oder in Ihrem Python-Skript:
n.loss = L.Python(n.ipx, n.ipy,python_param=dict(module='pyloss',layer='EuclideanLossLayer'),
loss_weight=1)
Nur sehr vorsichtig sein bei der Berechnung und implemeting die Gradienten (Rückwärtsfunktion) seit es neigt dazu, fehleranfällig zu sein.
Verwandte Themen
- 1. Ist es möglich, Beobachter zu TableView.contentOffset hinzuzufügen?
- 2. Ist es möglich, PostGIS zu PipelineDB hinzuzufügen?
- 3. Ist es möglich, CMFCToolBar einem Dialog hinzuzufügen?
- 4. Ist es möglich, Kommentare zu einer csproj-Datei hinzuzufügen?
- 5. ist es möglich, im Entwicklermodus eine Erweiterung zu Firefox hinzuzufügen?
- 6. Ist es möglich, tab-ähnliche Funktionen zu tmux-Fenstern hinzuzufügen?
- 7. Ist es möglich, einen OnClick Listener zu einer QCheckBox hinzuzufügen?
- 8. Ist es möglich, bootstrap-tagsinput zu textarea hinzuzufügen?
- 9. Ist es möglich, zu einer vorhandenen Doctrine Query hinzuzufügen?
- 10. Typescript, Ist es möglich, Methoden zu externen Klassenprototypen hinzuzufügen?
- 11. Ist es möglich, Pixel zu einem 'Auto'-Wert hinzuzufügen?
- 12. Ist es möglich, Links zu Kaminari einen Anker/Parameter hinzuzufügen?
- 13. Ist es möglich, ein benutzerdefiniertes Icon zu hta hinzuzufügen
- 14. Ist es möglich, ein benutzerdefiniertes Suchfeld zu Google Kontakte hinzuzufügen?
- 15. Ist es möglich, ein Benutzersteuerelement zu einem Composite-Steuerelement hinzuzufügen?
- 16. Ist es möglich, externe Befehlszeilenwerkzeuge zu Netbeans hinzuzufügen?
- 17. Ist es möglich, benutzerdefinierte Felder zu PHP ini-Datei hinzuzufügen?
- 18. Ist es möglich, eine Schaltfläche zu einer Bildlaufansicht hinzuzufügen?
- 19. Ist es möglich, Wasserzeichen zu Audiodatei mit Java hinzuzufügen?
- 20. Ist es möglich, dynamisch Seiten hinzuzufügen, wenn WiX verwendet wird?
- 21. Ist es möglich das neue Facebook Page Plugin zu stylen?
- 22. Ist es möglich, mit PowerMock neue Dateien zu erstellen?
- 23. Ist es möglich, einer laufenden Drools-Sitzung eine neue Regel hinzuzufügen?
- 24. Ist es möglich, Abhängigkeiten in einer pom.xml-Datei hinzuzufügen?
- 25. Ist es möglich, benutzerdefinierte Bilder zum Google Analytics Dashboard hinzuzufügen?
- 26. Ist es möglich, der containers.Map-Klasse in Matlab Methoden hinzuzufügen?
- 27. Ist es möglich, "statische" Erweiterungsfunktion für die Java-Klasse hinzuzufügen?
- 28. C# 3.0 Auto-Eigenschaften - Ist es möglich, benutzerdefiniertes Verhalten hinzuzufügen?
- 29. Ist es möglich, auf system.linq zwei Bedingungen hinzuzufügen? Einheit C#
- 30. Ist es möglich, einer Eigenschaft der dynamischen Objektlaufzeit Attribute hinzuzufügen?
können Sie [diese Implementierung] (https://github.com/tnarihi/caffe/blob/python-gradient-checker/python/caffe/test/test_gradient_checker.py) von Gradientenprüfung util für Python verwenden. – Shai