为什么我们需要在多维度标签的情况下划分损失



我正在学习TensorFlow的自定义培训教程。有两件事我不明白:

首先,在定义损失时,作者指出用一个例子的形状来划分,在多维标签的情况下:

"如果labels是多维的,则对每个样本中元素数量的per_example_loss求平均值。例如,如果预测的形状是(batch_size, H, W, n_classes),标签是(batch_size, H, W),则需要更新per_example_loss,如:per_example_loss /= tf.cast(tf.reduce_prod(tf.shape(labels)[1:]), tf.float32)">

为什么我们需要以这种方式重新调整损失?

其次,一个一般性问题:我注意到有几个函数使用with strategy.scope()注释。如果这个对象是全局可用的,那么我们可以在全局级别上定义一个函数,比如这个

with strategy.scope():
def example_function():
#do stuff

如果对象在全局范围内不可用,我们必须像这样构建代码:

def train():
strategy = ...
with strategy.scope():
def sub_function1():
#do stuff

这导致了一个大函数train(),它具有许多短的子函数。我想定义与train()相同级别的子函数,而不使用全局strategy对象。有没有解决办法来实现这一点?

对于更多的用户,这个问题在这里得到了回答。

相关内容

最新更新