2016-06-28 3 views
2

Ich mache einige Experimente beim Lesen von Daten mit Tensorflow Warteschlange, und ich möchte einen einfachen Fall unten fragen.Wie liest man benutzerdefiniertes Datenformat in Tensorflow mit FixedLengthRecordReader?

Angenommen, meine Binärdatendateien haben eine Liste von float Wert (4 Byte) und boolean Label (1 Byte). Zum Beispiel

3.4 true 2.1 false 0.3 true ..." 

Folgendes ist meine Testversion. Ich möchte einen 4-Byte-Teil (Umwandlung in float) und 1-Byte-Teil (Umwandlung in bool) schneiden. Ich bin mir jedoch nicht sicher, wie man in diesem Fall decode_raw() verwendet. Wenn ich uint8 verwende, schneidet es jedes Byte ab.

Wenn es falsch ist, FixedLengthRecordReader zu verwenden, was ist ein einfacher Weg, dies zu tun? Kann mir jemand helfen?

# Dimensions of data 
data_bytes = 4 
label_bytes = 1 
record_bytes = data_bytes + label_bytes 

reader = tf.FixedLengthRecordReader(record_bytes=record_bytes) 
key, value = reader.read(filename_queue) 

value = tf.decode_raw(value, tf.uint8) 
data_part = tf.cast(tf.slice(value, [0], [data_bytes]), tf.float32) 
label_part = tf.cast(tf.slice(value, [data_bytes], [label_bytes]), tf.bool)  

Antwort

4

so etwas wie dieses Versuchen:

data_part = tf.bitcast(tf.slice(value, [0], [data_bytes]), tf.float32) 

heißt tf.bitcast 4 uint8s in eine float32 umwandeln, anstelle tf.cast zu verwenden.

+0

Für diejenigen, die sich wundern, funktioniert dieser Vorschlag gut. Vielen Dank. –