张量流2.0中的批次标准化使预测结果更糟

时间:2019-11-13 21:21:20

标签: python tensorflow conv-neural-network

我建立了具有以下架构的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数据集。

1 个答案:

答案 0 :(得分:0)

link可以帮助您理解。

请注意-密集层是FC层,可进一步用于预测,无需标准化其输出。 当输入数据中存在较大差异(也称为协变量平移)时,如果要进一步为CNN层创建不平衡的输入数据,则标准化和批处理规范将非常有用。