极慢的复制(?)到十位数

2024-09-28 17:02:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理保存在.mat文件中的here大小为[610340340102]的高光谱图像。在用scipy加载它之后,它被表示为array。在计算之前,我必须把它改成[610*340102]。下面的代码正在使用i5-6400处理器的台式机上运行:

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))

它打印:Reshape time: 157.7449091748693

看起来,对如此小的数据集进行重塑操作不应该太慢。不管怎样,我把整形搬到了numpy a

^{pr2}$

哪个打印:Test time: 143.26529380869727

现在是什么消耗了这么多时间?如何解决这个问题。在


Tags: importtimesessiontfasscipystartend
1条回答
网友
1楼 · 发布于 2024-09-28 17:02:54

整形不是时间慢的原因,而是初始化需要时间。将代码更改为:

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

相关问题 更多 >