Tensorflow VarLenFeature und FixedLenFeature

9

Ich habe versucht, Bilder unterschiedlicher Größe in tf-records zu speichern. Ich habe festgestellt, dass die Bilder zwar unterschiedliche Größen haben, ich sie aber trotzdem mit FixedLenFeature laden kann.

Wenn ich die Dokumente auf FixedLenFeature und VarLenFeature überprüfe, scheint mir der Unterschied zu sein, dass VarLenFeauture einen dünnen Tensor zurückgibt.

Könnte jemand einige Situationen illustrieren, sollte man FixedLenFeature oder VarLenFeature benutzen?

    
ZijunLost 29.01.2017, 14:04
quelle

1 Antwort

12

Sie können Bilder wahrscheinlich laden, weil Sie sie mit dem Feature-Typ tf.train.BytesList() gespeichert haben und die gesamten Bilddaten ein großer Byte-Wert in einer Liste sind.

Wenn ich recht habe, verwenden Sie tf.decode_raw , um die Daten aus dem Bild zu holen, das Sie von TFRecord geladen haben.

Zu Anwendungsbeispielen: Ich verwende VarLenFeature zum Speichern von Datensätzen für die Objekterkennung. Es gibt eine variable Anzahl an Begrenzungsrahmen pro Bild (entspricht dem Objekt im Bild). Daher benötige ich ein weiteres Feature objects_number , um die Anzahl der Objekte (und Bboxen) zu verfolgen. Jede Bounding Box selbst ist eine Liste von 4 Float-Koordinaten

Ich verwende folgenden Code, um es zu laden:

%Vor%

Beachten Sie, dass "image_raw" eine feste Länge Feature (hat ein Element) und enthält Werte vom Typ "Bytes", aber ein Wert von "Bytes Typ" kann selbst variable Größe haben (es ist eine Zeichenfolge von Bytes und kann viele haben) Symbole darin). Also "image_raw" ist eine Liste mit einem Element vom Typ "Bytes", das sehr groß sein kann.

Um weiter zu erläutern, wie es funktioniert: Features sind Listen mit Werten, diese Werte haben einen spezifischen "Typ".

Datentypen für Features sind Teilmengen von Datentypen für Tensoren, die Sie haben:

  • int64 (64 Bit Speicherplatz im Speicher)
  • Bytes (belegt so viele Bytes im Speicher, wie Sie möchten)
  • float (belegt 32-64 Bits im Speicher idk wie viel)

Sie können hier Tensoren Datentypen überprüfen.

Sie können also Daten mit variabler Länge ohne VarLenFeatures speichern (eigentlich tun Sie es), aber zuerst müssen Sie es in Bytes / String-Features konvertieren und dann dekodieren. Und das ist die üblichste Methode.

    
Pietrko 05.03.2017, 02:13
quelle

Tags und Links