tensorflow session() 需要很长时间

tensorflow session() takes long time

我正在玩 tensorflow。我为我的预测计算并集的交集,并将其转换为 "readable" 格式,我使用以下代码使用 .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))

不确定这是完成这项工作的最佳方法,但它确实有效。如果有更好的意见,我会很高兴听到。