tensorflow会话()需要很长时间
我在玩tensorflow。我为我的预测计算联合上的交集,为了将其转换为“可读”格式,我使用.eval()函数并使用以下代码tensorflow会话()需要很长时间,tensorflow,python-3.6,Tensorflow,Python 3.6,我在玩tensorflow。我为我的预测计算联合上的交集,为了将其转换为“可读”格式,我使用.eval()函数并使用以下代码 def iou(y_true, y_pred,label : int): y_true = K.cast(K.equal(K.argmax(y_true), label), K.floatx()) y_pred = K.cast(K.equal(K.argmax(y_pred), label), K.floatx()) intersection =
def iou(y_true, y_pred,label : int):
y_true = K.cast(K.equal(K.argmax(y_true), label), K.floatx())
y_pred = K.cast(K.equal(K.argmax(y_pred), label), K.floatx())
intersection = K.sum(y_true * y_pred)
union = K.sum(y_true) + K.sum(y_pred) - intersection
return K.switch(K.equal(union, 0), 1.0, intersection / union)
def mean_iou(y_true, y_pred):
num_labels = (K.int_shape(y_pred)[-1] )
all_iou = []
total_iou = tf.convert_to_tensor(0, dtype='float32')
for label in range(num_labels):
total_iou = total_iou + iou(y_true, y_pred, label)
return total_iou / num_labels
one_ious, zero_ious, mean_ious, accuracies=[], [], [], []
with tf.Session() as sess:
for it in range(len(y_test)):
tmp=iou(y_test[it],y_pred[it],1)
one_ious.append(tmp.eval())
tmp=iou(y_test[it],y_pred[it],0)
zero_ious.append(tmp.eval())
tmp=mean_iou(tf.convert_to_tensor(y_test[it]),tf.convert_to_tensor(y_pred[it]))
mean_ious.append(tmp.eval())
问题是这需要时间(对于1500个16k点阵列,这可能需要半个多小时)
我想知道你们中是否有人能帮助我理解为什么要花这么长时间,如何修复它,以及是否有更好的方法来做同样的事情。我找到了一种方法来部分解决这个问题。函数最慢的部分是for循环中的3.eval(),在我的计算机上分别花费了大约5、1.5和1.5秒,在大约3个半小时内完成1600个阵列的任务 只需将结果附加到python列表并在最终列表上应用.eval()函数,就可以在大约3分钟内执行相同的任务
tmp1, tmp2, tmp3=[], [], []
import time
start=time.time()
with tf.Session() as sess:
for it in range(len(y_test)):
tmp1.append(iou(y_test[it],y_pred[it]),1)
tmp2.append(iou(y_test[it],y_pred[it]),0)
tmp3.append(mean_iou(tf.convert_to_tensor(y_test[it]),tf.convert_to_tensor(y_pred[it])))
one_ious=tf.convert_to_tensor(tmp1)
zero_ious=tf.convert_to_tensor(tmp2)
mean_ious=tf.convert_to_tensor(tmp3)
tmp1, tmp2, tmp3=[], [], []
one_ious=one_ious.eval()
zero_ious=zero_ious.eval()
mean_ious=mean_ious.eval()
end=time.time()
print('time: {}'.format(end-start))
不确定这是做这项工作的最佳方法,但它确实有效。如果有更好的意见,我会很高兴听到 我找到了部分解决这个问题的方法。函数最慢的部分是for循环中的3.eval(),在我的计算机上分别花费了大约5、1.5和1.5秒,在大约3个半小时内完成1600个阵列的任务 只需将结果附加到python列表并在最终列表上应用.eval()函数,就可以在大约3分钟内执行相同的任务
tmp1, tmp2, tmp3=[], [], []
import time
start=time.time()
with tf.Session() as sess:
for it in range(len(y_test)):
tmp1.append(iou(y_test[it],y_pred[it]),1)
tmp2.append(iou(y_test[it],y_pred[it]),0)
tmp3.append(mean_iou(tf.convert_to_tensor(y_test[it]),tf.convert_to_tensor(y_pred[it])))
one_ious=tf.convert_to_tensor(tmp1)
zero_ious=tf.convert_to_tensor(tmp2)
mean_ious=tf.convert_to_tensor(tmp3)
tmp1, tmp2, tmp3=[], [], []
one_ious=one_ious.eval()
zero_ious=zero_ious.eval()
mean_ious=mean_ious.eval()
end=time.time()
print('time: {}'.format(end-start))
不确定这是做这项工作的最佳方法,但它确实有效。如果有更好的意见,我会很高兴听到 嗨@Federico,欢迎来到StackOverflow!虽然你的介绍很有礼貌,但却增加了噪音,分散了对问题的注意力。你可以通过投票来感谢人们,并接受他们的答案。嗨@Federico,欢迎来到StackOverflow!虽然你的介绍很有礼貌,但却增加了噪音,分散了对问题的注意力。你可以通过投票和接受他们的答案来感谢他们