如何在张量流中优化内存用于循环?

时间:2018-04-26 12:38:50

标签: for-loop tensorflow loss-function

以均方误差(MSE)为例。一般来说,这个函数定义如下:

def exp_loss(batch_p, batch_t):
    loss_val = tf.reduce_mean(tf.squared_difference(batch_p, batch_t))
    return loss_val

但是当我使用for循环来元素计算错误时,就像这样:

def exp_loss_for(batch_p, batch_t):
    loss_val = 0
    ns = int(batch_p.get_shape()[0])  # batch_size
    sl = int(batch_p.get_shape()[1])  # sequence_length
    nd = int(batch_p.get_shape()[2])  # num_dim
    for i in range(ns):
        for j in range(sl):
            for k in range(nd):
                loss_val += tf.square(tf.subtract(batch_p[i, j, k], batch_t[i, j, k]))
    loss_val = loss_val / (ns * sl * nd)
    return loss_val
在图构建阶段,

tensorflow将消耗太多内存。 如果我必须使用类似exp_loss_for的for循环来定制我自己的丢失函数但更复杂,我有什么办法可以减少内存使用吗?

1 个答案:

答案 0 :(得分:0)

避免循环。更复杂的损失函数通常可以使用张量流操作来表示,而不使用for循环。