2

Ich versuche, ein CNN in Caffe zu trainieren. Ich wollte eine Menge Daten vergrößern, also verwende ich eine "Python" Ebene für die Eingabe, wie vorgeschlagen here.Caffe Python Layer für die Eingabe, setzen Sie den Datentyp auf Uint8

Allerdings sehe ich aus dem Protokoll, dass Caffe den Datentyp float32 für alle meine Daten verwendet. Das ist wirklich verschwenderisch, weil ich es nur mit 8-Bit-Ganzzahlen zu tun habe. Gibt es eine Möglichkeit, Caffe zu sagen, dtype='uint8' zu verwenden?

Ich habe versucht, die Daten typisieren, während die Top-Einstellung:

top[0].data[...] = someArray.astype(np.uint8, copy=False) 

aber das funktioniert nicht.

Irgendwelche Vorschläge?

Antwort

2

AFAIK, caffe wird derzeit kompiliert, um nur float32 oder float64 zu unterstützen. Ich nehme an, lmdb/leveldb Daten können in uint8 Format gespeichert werden, aber Caffe konvertiert es intern zu float32 beim Lesen.
Die Tatsache, dass Ihre Eingabedaten uint8 sind, bedeutet nicht, dass die gesamte Verarbeitung auf diese Weise erhalten bleibt. Bei der ersten Faltung/InnerProduct-Ebene werden Daten mit Gleitkommazahlen multipliziert und können nicht länger uint8 bleiben.
Also, ich nehme an, Sie sollten mit der kleinen Raumverschwendung auf der Eingabeschicht dulden und die Konvertierung auf uint8 aufgeben.

+1

Ok Ich denke du hast recht, ich würde sowieso nur in der Inputschicht sparen, es ist die Mühe absolut nicht wert. Sorry, ich kann nicht upvote, ich habe nicht genug Ruf. :) – gunner

+0

@gunner mach dir keine Sorgen, du bist auf dem richtigen Weg – Shai