Python 在哪里应用批量标准化

Python 在哪里应用批量标准化,python,deep-learning,pytorch,batch-normalization,Python,Deep Learning,Pytorch,Batch Normalization,我有输入数据,我正在通过relu隐藏层传递它。我想问我应该在哪里应用批量标准化?以下是模型架构: def function(self, data): hidden_layer = F.relu((self.layer1(data))) pred = self.pred(hidden_layer) pred = self.softmax(pred) return pred 我的最佳猜测是,它应该位于隐藏层,如self.batch\u norm(隐藏层)。输入数据已

我有输入数据,我正在通过relu隐藏层传递它。我想问我应该在哪里应用批量标准化?以下是模型架构:

def function(self, data):
    hidden_layer = F.relu((self.layer1(data)))
    pred = self.pred(hidden_layer)
    pred = self.softmax(pred)
    return pred

我的最佳猜测是,它应该位于隐藏层,如
self.batch\u norm(隐藏层)
。输入数据已使用
X=StandardScaler()进行缩放。fit_transform(X)

这是一个简单的菜单。。。一旦您的数据通过任何层,它们就不再是原来的形式——而且,最重要的是,它们不再是批处理的

只有在进入第一个隐藏层之前,才可以使用有效的批次规范

在许多(大多数?)实现中,批处理的观察是通过一系列的层运行的,一次一个;结果在最后一层累积。在这种情况下,“批处理”指的是back-prop staging:我们推迟back-prop,直到我们运行了批处理中的所有观察结果,然后根据批处理平均值进行更新


对于任何层接口,都有可能通过标准化抵消消失或爆炸的权重——这可能会让您感到困惑。然而,通常最好是(1)在你知道你需要之前不要把你的手指伸进去;(2) 作为反向传播的一部分,再次引入“批处理”同步。

是!它应该放在隐藏层上。你是对的,这是否意味着
hidden\u layer=F.relu(self.batch\u norm(self.linear1(data\u 1))
?我从隐藏层获得输出后是否需要再次应用它?如果我照你说的做,我就看不出图表上有什么不同。轮廓不平滑。啊。。。对于这些,我不希望有明显的差异。是什么让你相信你需要在这些数据集上使用批处理规范?我试着在玩具数据集上这样做。我应该使用更大的数据集吗?不一定——只有当某些批明显不能代表整个数据集时,才需要批处理规范,并将训练从良好的中心搜索路径中拉出来。对于行为良好的数据集,您不会注意到任何差异。要查看进程中的差异,您需要类似于两个集群的数据集,完全从一个集群获取前几个批。