tensorflow会话()需要很长时间

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 =

我在玩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 = 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!虽然你的介绍很有礼貌,但却增加了噪音,分散了对问题的注意力。你可以通过投票和接受他们的答案来感谢他们