batch normalization的原理解释可以看 https://www.cnblogs.com/guoyaohua/p/8724433.html 我觉得写得挺清晰的
实验结果:
batch_size的大小会影响batch normalization的效果。当batch_size过大的时候,会使得模型效果不稳定(我做的实验是模型偏向于预测为某一个类别)。
实验:
模型:DPCNN,在每个卷积层后面加batch_normalization。全连接层之间也加了batch_normalization
输入是需要配对的两个句子,输出是句子是否匹配的二分类结果。训练集共约12万条,其中0类别9万条,1类别3万条。
DPCNN的每个block定义如下:
def _block(self, x, k):
# x [batch, seq, 1, num_filters]
x = tf.pad(x, paddings=[[0,0], [0,1], [0,0], [0,0]])
px = tf.nn.max_pool(x, [1,3,1,1], strides=[1,2,1,1], padding="VALID") # [batch, floor((seq-3)/2)+1, 1, num_filters]
# conv
k+=1
x = tf.nn.relu(px) # same shape
x = self.conv3(k,x) ## padding= same, same shape
x = tf.layers.batch_normalization(x, training=self.is_training) ##
k+=1
x = tf.nn.relu(x)
x = self.conv3(k,x) ## same shape
x = tf.layers.batch_normalization(x, training=self.is_training)
x = x + px #x 和 px形状相同
return x, k
当batch_size为3000时,验证集上的准确率约为60%
当batch_size为128时,验证集上的准确率约为80%