以均方误差(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循环来定制我自己的丢失函数但更复杂,我有什么办法可以减少内存使用吗?
答案 0 :(得分:0)
避免循环。更复杂的损失函数通常可以使用张量流操作来表示,而不使用for循环。