Python 在多维标签的情况下,我们为什么需要分摊损失?

Python 在多维标签的情况下,我们为什么需要分摊损失?,python,tensorflow,Python,Tensorflow,我正在学习TensorFlow的教程。 有两件事我不明白: 首先,在定义损失时,作者指出,在多维标签的情况下,除以一个示例的形状: “如果标签是多维的,则平均每个样本中元素数量的每例损失。例如,如果预测形状是(批次大小,H,W,n类)且标签是(批次大小,H,W),您将需要更新每个示例的损失,例如:每个示例的损失/=tf.cast(tf.reduce\u prod(tf.shape(labels)[1:],tf.float32)” 我们为什么要这样重新计算损失 其次,一个一般性问题:我注意到有几个

我正在学习TensorFlow的教程。 有两件事我不明白:

首先,在定义损失时,作者指出,在多维标签的情况下,除以一个示例的形状:

“如果
标签
是多维的,则平均每个样本中元素数量的
每例损失
。例如,如果预测形状是
(批次大小,H,W,n类)
且标签是
(批次大小,H,W)
,您将需要更新每个示例的损失,例如:
每个示例的损失/=tf.cast(tf.reduce\u prod(tf.shape(labels)[1:],tf.float32)

我们为什么要这样重新计算损失

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

with strategy.scope():
  def example_function():
    #do stuff
如果对象在全局范围内不可用,我们必须按如下方式构造代码:

def train():
  strategy = ...

  with strategy.scope():
    def sub_function1():
      #do stuff
这就产生了一个大函数,
train()
,其中包含许多短子函数。我希望在与
train()
相同的级别上定义子函数,而不使用全局
策略
对象。
是否有解决方法来实现此目的?

对于其他用户,此问题已得到回答