Wie zum Lesen von json-Dateien in Tensorflow?
Ich versuche, eine Funktion schreiben, das liest json-Dateien in tensorflow. Die json-Dateien haben folgende Struktur:
{
"bounding_box": {
"y": 98.5,
"x": 94.0,
"height": 197,
"width": 188
},
"rotation": {
"yaw": -27.97019577026367,
"roll": 2.206029415130615,
"pitch": 0.0},
"confidence": 3.053506851196289,
"landmarks": {
"1": {
"y": 180.87722778320312,
"x": 124.47326660156205},
"0": {
"y": 178.60653686523438,
"x": 183.41931152343795},
"2": {
"y": 224.5936889648438,
"x": 141.62365722656205
}}}
Brauche ich nur die bounding box information. Es gibt ein paar Beispiele, wie man schreiben read_and_decode-Funktionen, und ich werde versuchen, um diese Beispiele in einer Funktion für die json-Dateien, aber es gibt immer noch eine Menge Fragen...:
def read_and_decode(filename_queue):
reader = tf.WhichKindOfReader() # ???
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(
serialized_example,
features={
'bounding_box':{
'y': tf.VarLenFeature(<whatstheproperdatatype>) ???
'x':
'height':
'width':
# I only need the bounding box... - do I need to write
# the format information for the other features...???
}
})
y=tf.decode() # decoding necessary?
x=
height=
width=
return x,y,height,width
Ich habe getan, Forschung auf dem internet für Stunden, aber nicht finden können, was wirklich detailliert auf, wie zu Lesen, json, in tensorflow...
Vielleicht kann jemand mir einen Anhaltspunkt...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update
Die Lösung unten nicht bekommen den job zu erledigen, aber es ist nicht sehr effizient, siehe die Kommentare für weitere details.
Ursprüngliche Antwort
Können Sie verwenden standard-python-json Parsen mit TensorFlow wenn Sie wickeln die Funktionen mit
tf.py_func
:Beachten Sie, dass
tf.py_func
gibt eine Liste von Tensoren lieber als nur eine einzige tensor, das ist, warum wir brauchen, um die wrap -parsed
in einer Liste[parsed]
. Wenn nicht,parsed
würde die Form[1, None, 4]
anstatt die gewünschte Form[None, 4]
(woNone
ist die batch-Größe).Verwendung Ihrer Daten erhalten Sie die folgenden Ergebnisse:
tf.TFRecordReader
ist geschrieben in C++ und ist daher zu vermeiden GIL, richtig? Vielen Dank, dass mich wissen!tf.constant()
array oder variable, und Holen von dort.Könnte dies Sockelleisten das Problem, aber Sie könnte Vorverarbeiten der Daten mit einem Kommandozeilen-tool wie https://stedolan.github.io/jq/tutorial/ in einer Zeile-basierte Daten-format wie csv. Wäre eventuell effizienter sein, auch.