我有输入数据,并且正在通过relu-hidenden层传递它。我想问我应该在哪里应用批量标准化?以下是模型架构:
def function(self, data):
hidden_layer = F.relu((self.layer1(data)))
pred = self.pred(hidden_layer)
pred = self.softmax(pred)
return pred
我最好的猜测是它应该像self.batch_norm(hidden_layer)
一样在隐藏层上进行。输入数据已经使用X = StandardScaler().fit_transform(X)
答案 0 :(得分:0)
这是一个简单的提示...一旦您的数据通过 any 层,它们将不再具有其原始形式-而且最重要的是,它们不再具有批量。
唯一可用于有效批处理规范的位置就在您输入第一个隐藏层之前。
在许多(大多数?)实现中,批处理的观察是逐个顺序地遍历各个层;结果在最后一层累积。在这种情况下,“批次”主要指的是反向支持阶段:我们将反向支持推迟到运行批处理中的所有观测值之后,然后再按批次平均值进行更新。
对于任何层接口,都可以通过归一化来抵消权重的消失或爆炸-这可能会使您感到困惑。但是,通常最好(1)在知道自己需要之前不要把手伸进去; (2)做为反向传播的一部分-再次引入“批处理”同步。