小编gau*_*ani的帖子

tf.GradientTape() 位置对模型训练时间的影响

我试图更新每个时期的权重,但我正在批量处理数据。问题是,为了规范损失,我需要在训练循环之外录制 TensorFlow 变量(要跟踪和规范化)。但是当我这样做时,训练时间是巨大的。

我认为,它将所有批次的变量累积到图中并在最后计算梯度。

我已经开始跟踪 for 循环外和 for 循环内的变量,后者比第一次要快。我很困惑为什么会发生这种情况,因为无论我做什么,我的模型的可训练变量和损失都保持不变。

# Very Slow

loss_value = 0
batches = 0

with tf.GradientTape() as tape:
    for inputs, min_seq in zip(dataset, minutes_sequence):
        temp_loss_value = my_loss_function(inputs, min_seq)
        batches +=1
        loss_value = loss_value + temp_loss_value

# The following line takes huge time.
grads = tape.gradient(loss_value, model.trainable_variables)

Run Code Online (Sandbox Code Playgroud)
# Very Fast

loss_value = 0
batches = 0

for inputs, min_seq in zip(dataset, minutes_sequence):
    with tf.GradientTape() as tape:
        temp_loss_value = my_loss_function(inputs, min_seq)
        batches +=1
        loss_value = loss_value + temp_loss_value …
Run Code Online (Sandbox Code Playgroud)

python gradient training-data tensorflow eager-execution

3
推荐指数
1
解决办法
1401
查看次数