2017-07-22 4 views
0

Ich arbeite mit hyperspektralem Bild der Größe [610, 340, 102] von here gespeichert in .mat-Datei. Nach dem Laden mit scipy wird es als Array dargestellt. Bevor ich Berechnungen anstellen kann, muss ich es auf [610 * 340, 102] umformen. Der folgende Code läuft auf Desktop-Rechner mit i5-6400 Prozessor:Drastisch langsames Kopieren (?) Nach Tensorflow

import tensorflow as tf 
import scipy.io as spio 
import time 

pavia_u = spio.loadmat("./../data/PaviaU.mat")["paviaU"] 
original_shape = tf.shape(pavia_u) 
pavia_u_reshaped = tf.to_float(tf.squeeze(tf.reshape(pavia_u, [-1, original_shape[0] * original_shape[1], original_shape[2]]))) 

with tf.Session() as session: 
    start = time.clock() 
    pavia_u_reshaped_value = session.run(pavia_u_reshaped) 
    end = time.clock() 
    print("Reshape time: {}".format(end - start)) 

und er druckt: Reshape time: 157.7449091748693

Es scheint, dass reshape Betrieb auf so relativ kleine Datenmenge nicht so langsam sein sollte. Wie auch immer, ich zog Umformung eine

pavia_u = spio.loadmat("./../data/PaviaU.mat")["paviaU"] 
original_shape = pavia_u.shape 
pavia_u_reshaped = pavia_u.reshape([-1, original_shape[0] * original_shape[1], original_shape[2]]).squeeze()) 

with tf.Session() as session: 
    start = time.clock() 
    session.run(tf.identity(pavia_u_reshaped)) 
    end = time.clock() 
    print("Test time: {}".format(end - start)) 

numpy die druckt: Test time: 143.26529380869727

Was jetzt so viel Zeit in Anspruch nimmt? Wie behebe ich das?

+0

es eine Reihe von Initialisierungen ist, die auf dem ersten session.run Anruf laufen lassen, was ist, wenn Sie es zweimal und Benchmark laufen beide Anrufe –

+0

I 4 aufeinanderfolgende Anrufe von 'session.run gemessen haben (tf.identity (pavia_u_reshaped)) 'und der Test ausgedruckt' Testzeit: 562.1225702215002' – Aeteros

Antwort

1

Reshape ist nicht der Grund für die langsame Zeit, es ist die Initialisierung, die Zeit braucht. Ändern Sie den Code zu:

original_shape = tf.shape(pavia_u) 
X = tf.Variable(pavia_u, dtype=tf.float32) 

pavia_u_reshaped = tf.to_float(tf.squeeze(tf.reshape(X, [-1, original_shape[0] * original_shape[1], original_shape[2]]))) 


sess = tf.InteractiveSession() 
start = time.clock() 
tf.global_variables_initializer().run() 
end = time.clock() 
print("Initialization time: {}".format(end - start)) 

start = time.clock() 
pavia_u_reshaped_value = sess.run(pavia_u_reshaped) 
end = time.clock() 
print("Reshape time: {}".format(end - start)) 

# Initialization time: 734.495346 
# Reshape time: 1.897106 
+0

Danke! Aber warum ist es so langsam? Gibt es eine Möglichkeit, die Initialisierung zu beschleunigen? – Aeteros