我建造了一个CNN,其架构如下:
X = self.conv_layer_1(inputs)
X = self.conv_layer_2(X)
X = self.max_pool_1(X)
X = self.dropout_1(X,training = training)
X = self.batch_norm_1(X,training = training)
X = self.conv_layer_3(X)
X = self.conv_layer_4(X)
X = self.max_pool_2(X)
X = self.dropout_2(X,training = training)
X = self.batch_norm_2(X,training = training)
X = self.flatten(X)
X = self.dense_1(X)
X = self.batch_norm_3(X,training = training)
X = self.dropout_3(X)
X = self.softmax(X)
return X如果我不使用batch_normalization层,我得到了良好的准确性(训练95%,测试79 %)。如果我只使用self.batch_norm_3,那么结果会变得越来越糟,在测试集上,损失会急剧增加(就像每3-4个周期从1.23123到500000)。
如果我使用self.batch_norm_1和/或self.batch_norm_2,我总能得到10%的测试和训练的准确性)。
为什么会发生这种情况?
我使用了CIFAR-10数据集。
发布于 2019-11-13 22:43:20
这个link可以帮助你理解。
请注意-密集层是一个FC层,进一步用于预测,没有必要标准化其输出。当输入数据有很大的变化(也称为协变量移位)时,标准化和批次范数是有用的,这将进一步为CNN层造成不平衡的输入数据。
https://stackoverflow.com/questions/58845793
复制相似问题