2016-07-24 20 views
1

Für ein Softmax Regressionsprogramm mit Tensorflow in Python möchte ich meine 1000 JPEG Bilddateien als 2D Tensor x von: [Bildindex, Pixelindex] erhalten. Der "Bildindex" ist das Bild und der Pixelindex ist ein spezifisches Bildpixel für dieses Bild. die Modellgleichung ist:Mehrere Bilddateien als 2D Tensor im Tensorflow erhalten

y = tf.nn.softmax(tf.matmul(x, W) + b) 
where: 
x = tf.placeholder(tf.float32, [None, image_size]) 
W = tf.Variable(tf.zeros([image_size, classes])) 
b = tf.Variable(tf.zeros([classes])) 

image size = Höhe * Breite des Bildes (konstant für alle Bilder).

Was ist der beste Weg in Tensorflow, um meine Bilddateien in dieser Form zu erhalten?

Antwort

1

Wenn ich Bildbearbeitung mache, verwende ich entweder OpenCV (cv2.imread (...)) oder Scipy (scipy.ndimage.imread (...)), um die Bilddateien zu lesen. Ich denke auch, dass Tensorflow einen eigenen Bildleser haben kann. Diese beiden Funktionen geben das Bild als ein numpiges Array zurück. Sie können in den Argumenten angeben, ob Sie Graustufen oder Farben verwenden möchten. Jetzt müssen Sie die Bilder vorverarbeiten. Möglicherweise müssen Sie den Datentyp konvertieren (OpenCV verwendet 8-Bit-Ganzzahlen anstelle von float32) und die Daten normalisieren. Sie können die Größe an dieser Stelle auch ändern, wenn die Bilder nicht alle die gleiche Größe haben.

Sie können diese numpigen Arrays abflachen, um eine flache Darstellung der Bilder zu erhalten. Rufen Sie einfach die Funktion flatten() von np.darray auf. Nachdem Sie die Bilder, die Sie für Ihren Stapel benötigen, geladen und geglättet haben, zeichnen Sie sie zusammen in einem numpligen Array np.array([img1, img2, ..., imgN]) und dieses Array wird von Form [Bilder, Pixel] sein. Sie können dies dann an Sie x Platzhalter füttern.

0

ich Vorprozess alle Bilder bevorzugen würde, wenn es für die Ausbildung ist, aber für die Verwendung von Tensorflow on-line mit einem Live-Bildstrom, würde ich die folgende Methode versuchen, die dynamisch die Daten im Speicher verändert:

any_shape = [the most natural shape according to the data you already have...] 
x_unshaped = tf.placeholder(tf.float32, any_shape) 
x = tf.reshape(x_unshaped, [-1, image_size]) 

Wenn Ihre Daten bereits richtig im Speicher bestellt, könnten Sie tf.Tensor.set_shape() versuchen:

die tf.Tensor.set_shape() -Methode aktualisiert die statische Form eines Tensor Objekt, und es wird in der Regel verwendet, um zusätzliche zu schaffen Form Information, wenn dies nicht direkt abgeleitet werden kann. Es ändert sich nicht die dynamische Form des Tensors.

Quelle: https://www.tensorflow.org/versions/r0.9/api_docs/python/framework.html